Arbejd med ressourcer i andre filsystemer

Det meste af API'et i hierarkiet IResource arbejder på samme måde, uanset hvilken type filsystem, ressourcen er gemt i. Der er imidlertid nogle bestemte API'er, du skal undgå, når du arbejder med ressourcer på andre filsystemer, fordi de kun er designet til at arbejde med det lokale filsystem.

I særdeleshed er metoden IResource.getLocation specificeret til at returnere den lokale filsystemsti for ressourcen. Hvis ressourcen er i et andet filsystem, kan denne metode ikke anvendes og returnerer NULL. Det er bedre at bruge metoden getLocationURI i stedet for, da den arbejder uafhængigt af typen af filsystem, som ressourcen er lagret i.

Tilsvarende bør metoderne IProjectDescriptiongetLocation og setLocation undgås, fordi de kun fungerer effektivt i det lokale filsystem. De URI-baserede placeringsmetoder bør anvendes i stedet for.

Lokal cache

Antag, at du arbejder med ressourcer, der ikke er på det lokale filsystem, men du har brug for en lokal fil. Du anvender f.eks. et bibliotek, der er afhængigt af java.io.File). I dette tilfælde kan du bruge metoden IFileStore.toLocalFile til at hente en lokal kopi af filen. Bemærk, at der kun placeres én fil eller ét bibliotek i den lokale cache, ikke hele bibliotekstræet. Nedenfor er et eksempel på brug af lokal cache til at åbne en zip-fil i en IFileStore:

  	IFileStore store = ...//fillagring
   java.io.File file = store.toLocalFile(EFS.NONE, null);
   if (file == null) {
      //det er ikke et lokalt fillager, så der skal placeres en lokal kopi i cache
      file = store.toLocalFile(EFS.CACHE, null);
   }
   java.util.zip.ZipFile zip = new java.util.ZipFile(file);

Link til andre filsystemer

Du kan anvende sammenkædede ressourcer til at oprette projekter, der sammenkæder ressourcer fra flere filsystemer. Brug blot metoden IFile.createLink(URI, int, IProgressMonitor) eller IFolder.createLink(URI, int, IProgressMonitor) til at oprette en ressource i et eksisterende projekt, hvis indhold er gemt på en anden placering i et vilkårligt filsystem. Du kan endda oprette link under andre sammenkædede ressourcer for at oprette arbitrære ressourcetræer, der anvender mange forskellige filsystemer. Her er et enkelt eksempel, der opretter en sideordnet sammenkædet fil, der deler den samme filsystemplacering som kilden:

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