La mayor parte de las API de la jerarquía IResource funcionan del mismo modo independientemente del tipo de sistema de archivos en el que estén almacenados los recursos. Sin embargo, existen algunas API determinadas que es necesario evitar al trabajar con recursos de otros sistemas de archivos, ya que están diseñadas para trabajar sólo con el sistema de archivos local.
En particular, el método IResource.getLocation está destinado específicamente a devolver la vía de acceso del sistema de archivos local del recurso. Si el recurso está en otro sistema de archivos, este método no es aplicable y devolverá null. Es más aconsejable utilizar el método getLocationURI, que funciona independientemente del tipo de sistema de archivos en el que está almacenado el recurso.
Del mismo modo deben evitarse los métodos IProjectDescription getLocation y setLocation, ya que sólo son eficaces en el sistema de archivos local. En su lugar, deben utilizarse los métodos de ubicación basada en URI.
Supongamos que está trabajando con recursos que no se encuentran en el sistema de archivos local, pero en realidad necesita un archivo local. Por ejemplo, puede que esté utilizando una biblioteca que tiene una dependencia sobre java.io.File. En este caso, puede utilizar el método IFileStore.toLocalFile para obtener una copia local del archivo. Tenga en cuenta que esta operación solo almacenará en memoria caché local un archivo o directorio, en lugar de todo un árbol de directorios. A continuación figura un ejemplo de utilización de una memoria caché local para abrir un archivo zip en un IFileStore:
IFileStore store = ...;//un almacén de archivos java.io.File file = store.toLocalFile(EFS.NONE, null); if (file == null) { //no es un almacén de archivos local, por lo que es necesario almacenar una copia local en memoria caché file = store.toLocalFile(EFS.CACHE, null); } java.util.zip.ZipFile zip = new java.util.ZipFile(file);
Puede utilizar recursos enlazados para crear proyectos que reúnan recursos de varios sistemas de archivos. Simplemente,utilice el método IFile.createLink(URI, int, IProgressMonitor) o IFolder.createLink(URI, int, IProgressMonitor) para crear un recurso en un proyecto existente cuyo contenido se almacene en otra ubicación de un sistema de archivos arbitrario. Incluso puede crear enlaces debajo de otros recursos enlazados para crear árboles de recursos arbitrarios procedentes de sistemas de archivos muy diferentes. A continuación figura un ejemplo sencillo que crea un archivo enlazado hermano que comparte la misma ubicación de sistema de archivos con el fuente:
IFile source = ...;//un archivo fuente IFile link = source.getParent().getFile(new Path(source.getName() + ".link")); link.createLink(source.getLocationURI(), IResource.NONE, null);