Utilisation des ressources contenues dans d'autres systèmes de fichiers

La plupart des API contenues dans la hiérarchie de IResource fonctionnent de la même manière, quel que soit le type de fichier dans lequel les ressources sont stockées. Toutefois, vous devez éviter d'utiliser certaines API lorsque vous travaillez avec des ressources contenues dans d'autres systèmes de fichiers, car elles sont destinées à utiliser uniquement le système de fichiers local.

Notamment, la méthode IResource.getLocation est indiquée pour renvoyer le chemin du système de fichiers local de la ressource. Si la ressource réside dans d'autres systèmes de fichiers, cette méthode ne s'applique pas et renvoie la valeur null. Il est préférable d'utiliser à la place la méthode getLocationURI, qui s'applique indépendamment du type de système de fichiers dans lequel la ressource est enregistrée.

De même, l'utilisation des méthodes IProjectDescription getLocation et setLocation est déconseillée car celles-ci fonctionnent uniquement dans le système de fichiers local. Vous devez utiliser à la place les méthodes de localisation basées sur l'URI.

Mise en cache locale

Imaginez que vous utilisez des ressources qui ne résident pas dans le système de fichiers local, mais que vous avez réellement besoin d'un fichier local. Vous pouvez, par exemple, utiliser une bibliothèque qui possède une dépendance sur java.io.File). Dans ce cas, vous pouvez utiliser la méthode IFileStore.toLocalFile pour obtenir une copie locale du fichier. Notez que cette méthode n'entraînera que la mise en cache locale d'un fichier ou d'un répertoire, au lieu de l'arborescence des répertoires complète. L'utilisation de la mise en cache locale pour ouvrir un fichier zip sur une instance IFileStore est illustrée ci-dessous :

   IFileStore store = ...;//un magasin de fichiers
   java.io.File file = store.toLocalFile(EFS.NONE, null);
   if (file == null) {
      //nous n'avons pas de magasin de fichiers local, nous avons donc besoin de mettre une copie locale en cache
      file = store.toLocalFile(EFS.CACHE, null);
   }
   java.util.zip.ZipFile zip = new java.util.ZipFile(file);

Liaison à d'autres systèmes de fichiers

Vous pouvez utiliser des ressources liées pour créer des projets qui regroupent des ressources de plusieurs systèmes de fichiers. Utilisez simplement la méthode IFile.createLink(URI, int, IProgressMonitor) ou IFolder.createLink(URI, int, IProgressMonitor) pour créer une ressource dans un projet existant dont le contenu est stocké à un autre emplacement dans un système de fichiers arbitraire. Vous pouvez créer des liens en dessous d'autres ressources liées pour créer des arborescences de ressources arbitraires issues de différents systèmes de fichiers. Dans l'exemple suivant, un fichier lié apparenté partageant le même emplacement de système de fichiers que la source est créé :

   IFile source = ...;//un fichier source
   IFile link = source.getParent().getFile(new Path(source.getName() + ".link"));
   link.createLink(source.getLocationURI(), IResource.NONE, null);