Praca z zasobami w innych systemach plików

Większość interfejsów API w hierarchii IResource działa w ten sam sposób, niezależnie od tego, w jakim rodzaju systemu plików zapisane są zasoby. Istnieją jednak interfejsy API, których należy unikać podczas pracy z zasobami w innych systemach plików, ponieważ służą one tylko do pracy w lokalnym systemie plików.

Na przykład metoda IResource.getLocation zwraca ścieżkę w lokalnym systemie plików dla danego zasobu. Jeśli zasób znajduje się w innym systemie plików, metody nie można stosować i zwraca ona wartość null. Lepiej więc zamiast niej stosować metodę getLocationURI, która działa niezależnie od tego, w jakim rodzaju systemu plików zapisany jest zasób.

Z podobnego powodu należy unikać stosowania metod IProjectDescription getLocation i setLocation, ponieważ działają one tylko w lokalnym systemie plików. Zamiast nich należy użyć metod opartych na URI.

Buforowanie lokalne

Załóżmy, że pracujemy z zasobami zapisanymi w innym systemie plików niż lokalny, ale zdecydowanie potrzebujemy pliku lokalnego. Przykład: stosowana jest biblioteka zależna od java.io.File. W tym przypadku można użyć metody IFileStore.toLocalFile, aby uzyskać lokalną kopię pliku. Należy zauważyć, że spowoduje to utworzenie lokalnego bufora tylko jednego pliku lub katalogu, a nie całego drzewa katalogów. Poniżej przedstawiono przykład wykorzystania bufora lokalnego do otwarcia plik zip przy użyciu metody IFileStore:

   IFileStore store = ...;//jakaś składnica plików
   java.io.File file = store.toLocalFile(EFS.NONE, null);
   if (file == null) {
      //nie używamy lokalnej składnicy plików, więc musimy utworzyć kopię lokalną
      file = store.toLocalFile(EFS.CACHE, null);
   }
   java.util.zip.ZipFile zip = new java.util.ZipFile(file);

Tworzenie dowiązań do innych systemów plików

Aby tworzyć projekty, które łączą zasoby z różnych systemów plików, można skorzystać z zasobów dowiązywanych. Wystarczy użyć metody IFile.createLink(URI, int, IProgressMonitor) lub IFolder.createLink(URI, int, IProgressMonitor), aby utworzyć zasób w istniejącym projekcie, którego treść jest zapisana w innym miejscu w jakimś systemie plików. Można nawet tworzyć dowiązania pod innymi dowiązanymi zasobami, co umożliwia tworzenie drzew zasobów łączących zasoby z różnych systemów plików. Poniżej przedstawiono prosty przykład tworzący siostrzany plik dowiązany, współużytkujący to samo miejsce w systemie plików, co plik źródłowy:

   IFile source = ...;//jakiś plik źródłowy
   IFile link = source.getParent().getFile(new Path(source.getName() + ".link"));
   link.createLink(source.getLocationURI(), IResource.NONE, null);