使用其他檔案系統中的資源

IResource 階層中的大部分 API,不論資源是儲存在哪一種檔案系統中,運作方式都相同。 不過,當使用其他檔案系統中的資源時,您必須避免某些特定 API,因為它們是專為了使用本端檔案系統而設計的。

尤其是 IResource.getLocation 方法,它指定為傳回資源的本端檔案系統路徑。 如果資源在其他檔案系統中,這個方法就不適用,它會傳回 null。 您最好改用 getLocationURI 方法,不論資源儲存在哪一種檔案系統,都能運作。

同樣地,您也應該避免使用 IProjectDescription getLocationsetLocation 方法,因為它只在本端檔案系統中有效。 您應該改用 URI 型的位置方法。

本端快取

假設您使用的資源不在本端檔案系統中,但您實際上需要一個本端檔案。 例如,您使用的程式庫可能相依於 java.io.File。 在這個情況下,您可以利用 IFileStore.toLocalFile 方法來取得檔案的本端副本。 請注意,這只會在本端快取一個檔案或目錄,而不是整個目錄樹。 以下是利用本端快取,在 IFileStore 上開啟 ZIP 檔的範例:

   IFileStore store = ...;//某個檔案儲存庫
   java.io.File file = store.toLocalFile(EFS.NONE, null);
   if (file == null) {
      //我們不是本端檔案儲存庫,因此,需要快取本端副本
      file = store.toLocalFile(EFS.CACHE, null);
   }
   java.util.zip.ZipFile zip = new java.util.ZipFile(file);

鏈結至其他檔案系統

您可以利用鏈結的資源來建立將多個檔案系統的資源繪製在一起的專案。 您只需要利用 IFile.createLink(URI, int, IProgressMonitor)IFolder.createLink(URI, int, IProgressMonitor) 方法,在內容儲存於任意檔案系統中之另一個位置的現有專案中建立資源。 您甚至可以在其他鏈結資源之下建立鏈結,以建立繪製來源為許多不同檔案系統的任意資源樹。 以下是一個簡單範例,它建立一個同層級的鏈結檔案來共用與來源相同的檔案系統位置:

   IFile source = ...;// 某個來源檔案
   IFile link = source.getParent().getFile(new Path(source.getName() + ".link"));
   link.createLink(source.getLocationURI(), IResource.NONE, null);