Resurssien käyttö muissa tiedostojärjestelmissä

Suurin osa IResource-hierarkian ohjelmointirajapinnoista toimii samalla tavalla huolimatta siitä, millaiseen tiedostojärjestelmään resurssit on tallennettu. Joitakin ohjelmointirajapintoja kuitenkin kannattaa välttää käytettäessä muissa tiedostojärjestelmissä olevia resursseja, koska ne on suunniteltu käyttämään paikallista tiedostojärjestelmää.

Varsinkin IResource.getLocation-metodi on määritetty palauttamaan resurssin paikallisen tiedostojärjestelmän polun. Jos resurssi on jossakin muussa tiedostojärjestelmässä, metodi ei toimi, vaan palauttaa arvon null. On parempi käyttää metodia getLocationURI, joka toimii siitä huolimatta, millaiseen tiedostojärjestelmään resurssi on tallennettu.

Samoin metodeja IProjectDescription getLocation ja setLocation tulee välttää, koska ne toimivat vain paikallisessa tiedostojärjestelmässä. Käytä niiden sijasta URI-perusteisia paikannusmetodeja.

Paikallinen välimuisti

Oletetaan, että käytät resursseja, jotka eivät ole paikallisessa tiedostojärjestelmässä, mutta tarvitset paikallisen tiedoston. Käytössä voi olla esimerkiksi kirjasto, jossa on java.io.File-alisteisuus. Tässä tapauksessa voit hankkia paikallisen kopion tiedostosta IFileStore.toLocalFile-metodin avulla. Huomaa, että tämän tuloksena vain yksi tiedosto tai hakemisto tallennetaan paikallisesti välimuistiin, ei kokonaista hakemistorakennetta. Seuraavassa on esimerkki paikallisen välimuistitallennuksen käytöstä zip-tiedoston avaamiseen IFileStore-kohteessa:

   IFileStore store = ...;//jokin tiedostovarasto
   java.io.File file = store.toLocalFile(EFS.NONE, null);
   if (file == null) {
      //emme ole paikallisessa tiedostovarannossa, joten paikallinen kopio on tallennettava välimuistiin
      file = store.toLocalFile(EFS.CACHE, null);
   }
   java.util.zip.ZipFile zip = new java.util.ZipFile(file);

Linkitys muihin tiedostojärjestelmiin

Linkitettyjen resurssien avulla voit luoda projekteja, jotka käyttävät resursseja useista tiedostojärjestelmistä. Voit luoda resurssin aiemmin luotuun projektiin, jonka sisältö on tallennettu toiseen sijaintiin muussa tiedostojärjestelmässä käyttämällä metodia IFile.createLink(URI, int, IProgressMonitor) tai IFolder.createLink(URI, int, IProgressMonitor). Voit myös luoda resurssirakenteita useiden eri tiedostojärjestelmien resursseista luomalla linkkejä muiden linkitettyjen resurssien alle. Seuraavassa on esimerkki, jossa luodaan linkitetty rinnakkaistiedosto, jolla on sama tiedostojärjestelmän sijainti kuin lähteellä:

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