A maioria dos API na hierarquia IResource funciona da mesma forma independentemente do tipo de sistemas de ficheiros em que os recursos estão armazenados. Contudo, existem alguns APIs que necessita de evitar ao trabalhar com recursos noutros sistemas de ficheiros, uma vez que são apenas concebidos para funcionar com o sistema de ficheiros local.
Em particular, o método IResource.getLocation é especificado de modo a devolver o caminho do sistema de ficheiros local do recurso. Se o recurso se encontrar noutro sistema de ficheiros, este método não é aplicável e irá devolver o valor nulo. É aconselhável utilizar o método getLocationURI, que funciona independentemente do tipo de sistema de ficheiros em que os recursos estão armazenados.
Do mesmo modo, o método IProjectDescription getLocation e setLocation deverão ser evitados, uma vez que são apenas eficazes no sistema de ficheiros local. Em vez disso, deverão ser utilizados os métodos de localização baseados no URI.
Suponha que está a trabalhar com recursos que não estão contidos no sistema de ficheiros local, mas que necessita realmente de um ficheiro local. Por exemplo, poderá estar a utilizar uma biblioteca que contém uma dependência em java.io.File). Neste caso, pode utilizar o método IFileStore.toLocalFile para obter uma cópia local do ficheiro. Repare que esta acção apenas fará com que um ficheiro ou directório seja colocado em cache localmente, em vez de toda a árvore de directórios. Em seguida é apresentado um exemplo através da da colocação em cache local para abrir um ficheiro zip num IFileStore:
IFileStore store = ...;//some file store java.io.File file = store.toLocalFile(EFS.NONE, null); if (file == null) { //we are not a local file store, so we need to cache a local copy file = store.toLocalFile(EFS.CACHE, null); } java.util.zip.ZipFile zip = new java.util.ZipFile(file);
Pode utilizar recursos com ligações para criar projectos que juntam recursos a partir de vários sistemas de ficheiros. Utilize simplesmente o método IFile.createLink(URI, int, IProgressMonitor) ou IFolder.createLink(URI, int, IProgressMonitor) para criar um recurso num projecto existente cujos conteúdos estão armazenados noutra localização num sistema de ficheiros arbitrário. Pode mesmo criar ligações por baixo de outros recursos com ligações para criar árvores de recursos arbitrários a partir de vários sistemas de ficheiros diferentes. Em seguida é apresentado um exemplo simples da criação de um ficheiro com ligações equivalente que partilha a localização do sistema de ficheiros com a origem:
IFile source = ...;//some source file IFile link = source.getParent().getFile(new Path(source.getName() + ".link")); link.createLink(source.getLocationURI(), IResource.NONE, null);