Arbeide med ressurser i andre filsystemer

Det meste av APIet i IResource-hierarkiet virker på samme måte uavhengig av hva slags filsystem ressursene er lagret i. Det er imidlertid enkelte bestemte APIer du må unngå når du arbeider med ressurser i andre filsystemer, fordi de bare er beregnet brukt med andre filsystemer.

Særlig spesifiseres metoden IResource.getLocation for å returnere den lokale filsystembanen til ressursen. Hvis ressursen er i et annet filsystem, gjelder ikke denne metoden, og den vil da returnere null. Det er bedre å bruke metoden getLocationURI i stedet, som virker uansett hva slags filsystem ressursen er lagret i.

Likeledes bør metodene IProjectDescription getLocation og setLocation unngås fordi de er effektive bare i det lokale filsystemet. De URI-baserte plasseringsmetodene bør brukes i stedet.

Lokal hurtigbufring

La oss si at du arbeider med ressurser som ikke er i det lokale filsystemet, men at du virkelig trenger en lokal fil. Du kan for eksempel bruke et bibliotek som er avhengig av java.io.File). I så fall kan du bruke metoden IFileStore.toLocalFile til å få tak i en lokal kopi av filen. Merk deg at dette bar vil gjøre at filen eller katalogen hurtigbufres lokalt snarere enn i et fullstendig katalogtre. Her er et eksempel på bruk av lokal hurtigbufring for å åpne en ZIP-fil på en IFileStore:

   IFileStore store = ...;//et fillager
   java.io.File file = store.toLocalFile(EFS.NONE, null);
   if (file == null) {
      //vi er ikke et lokalt fillager, så vi må hurtigbufre en lokal kopi
      file = store.toLocalFile(EFS.CACHE, null);
   }
   java.util.zip.ZipFile zip = new java.util.ZipFile(file);

Linke til andre filsystemer

Du kan bruke linkede ressurser til å opprette prosjekter som fører sammen ressurser fra flere filsystemer. Bare bruk metoden IFile.createLink(URI, int, IProgressMonitor) or IFolder.createLink(URI, int, IProgressMonitor) til å opprette en ressurs i et eksisterende prosjekt med innhold som er lagret et annet sted i et vilkårlig filsystem. Du kan til og med opprette linker under andre linkede ressurser for å opprette vilkårlige ressurstrær som inkluderer mange forskjellige filsystemer. Her er en enkelt eksempel som oppretter en søskenlinket fil som har samme filsystemplassering som kilden:

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