2012-01-11 13 views
6

Ho un oggetto IFile che deve essere utilizzato come oggetto java.io.File. Sto convertendo usando il seguente codice.Converti IFile in file

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

Ma la chiamata a file.exists() restituisce false.

+0

"Ma la chiamata a file.exists() restituisce false." Ciò significa che il file non esce o il percorso non è valido. Hai anche provato 'ifile.exists()'? –

risposta

9

Si desidera utilizzare IResource.getLocation() che restituisce il percorso del file locale. Tuttavia, leggi attentamente i commenti di javadoc poiché non puoi presumere che una risorsa sia supportata da un file reale (può essere qualsiasi cosa, a seconda di come è stato impostato il progetto).

+4

Il suggerimento di Francis funziona bene. Un'altra opzione che ho finalmente usato è 'file = ifile.getRawLocation(). MakeAbsolute(). ToFile();' – Viral

3

IFile fa parte della query per modificare l'area di lavoro, non il file effettivo. Anche IPath fa parte della query valida su Workspace.

Un IFile non può essere contenuto da Workspace fisicamente, ad es. Cloned Git Project. Un po 'di IFile può essere un link giusto, non un vero file. E alcuni IFile potrebbero essere effettivamente presenti in remoto.

Eclipse utilizza un file system indipendente denominato "EFS". EFS gestisce i file sull'area di lavoro e sul file system nativo. È possibile individuare il file locale con EFS. (Se esiste in locale)

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());