2012-01-11 16 views
6

Mam obiekt IFile, który musi być użyty jako obiekt java.io.File. Konwertuję za pomocą następującego kodu.Konwertuj plik IFIL do pliku

file = ifile.getFullPath().toFile(); 

Jednak połączenie z file.exists() zwraca wartość false.

+0

"Ale wywołanie file.exists() zwraca wartość false." Oznacza to, że plik nie zostanie zamknięty lub ścieżka jest nieprawidłowa. Czy próbowałeś również 'ifile.exists()'? –

Odpowiedz

9

Chcesz użyć IResource.getLocation(), która zwraca ścieżkę pliku lokalnego. Przeczytaj jednak uważnie komentarze javadoc, ponieważ nie można założyć, że dany zasób jest wspierany przez rzeczywisty plik (może to być wszystko w zależności od konfiguracji projektu).

+4

Sugestia Francisa działa dobrze. Inną opcją, którą w końcu wykorzystałem, jest 'file = ifile.getRawLocation(). MakeAbsolute(). ToFile();' – Viral

3

IFile jest częścią zapytania do zmodyfikowanego obszaru roboczego, a nie rzeczywistego pliku. IPath jest również częścią kwerendy, która jest ważna w Workspace.

Fizycznie IFIL może nie być zawarty w Workspace, np. Clonned Git Project. Niektóre elementy mogą być prostym linkiem, a nie rzeczywistym plikiem. A niektóre elementy IFIL mogą faktycznie istnieć w zdalnej lokalizacji.

Eclipse korzysta z niezależnego systemu plików o nazwie "EFS". EFS zarządza plikami w obszarze roboczym i rodzimym systemie plików. Możesz zlokalizować plik lokalny przy pomocy EFS. (Jeśli istnieje w wersji lokalnej)

IFile file = ...; 

// gets URI for EFS. 
URI uri = file.getLocationURI(); 

// what if file is a link, resolve it. 
if(file.isLinked()){ 
    uri = file.getRawLocationURI(); 
} 

// Gets native File using EFS 
File javaFile = EFS.getStore(uri).toLocalFile(0, new NullProgressMonitor()); 
Powiązane problemy