什麼是 Java 資源
Java 資源是封裝於 Java 應用程式和程式庫的資料檔案。這些資源會在執行階段載入 Class.getResource(String name)
,並傳回 java.net.URL
或 Class.getResourceAsStream(String name)
,後者會傳回 java.io.InputStream
。通常在預計可使用資源時就會使用 getResourceAsStream()
方法,因為如果不存在,就會擲回 IOException
。如果資源不存在,getResource()
方法會傳回空值,因此建議您測試選用資源。
資源名稱和路徑
J2ObjC 使用資源的相對路徑或絕對路徑,透過查看應用程式的主要套件 ([NSBundle mainBundle]
) 找出資源:
相對路徑
指定資源路徑的建議方法是使用相對路徑。相對路徑的開頭不是正斜線 (「/」)。讀取含有相對路徑的資源時,系統會修改類別的套件名稱,將套件名稱中的半形句號 (「.」) 變更為正斜線 (「/」),然後會將 Class.getResource(String name)
或 Class.getResourceAsStream(String name)
方法呼叫中指定的相對路徑附加至套件路徑。
舉例來說,如果應用程式有 foo.bar.Mumble
類別,則與該套件中的類別相關的所有資源基本路徑為 /foo/bar
。叫用 Mumble.class.getResource("oops/error.jpg")
時,oops/error.jpg
會附加至套件的路徑,因此其完整的資源路徑為 /foo/bar/oops/error.jpg
。
絕對路徑
您也可以透過絕對路徑存取資源,方法是以正斜線 (「/」) 做為資源名稱的開頭。系統會忽略套件名稱,因此 J2ObjC 會使用應用程式 Java 來源中 Class.getResource(String name)
或 Class.getResourceAsStream(String name)
參照中指定的路徑,在應用程式主要套件中找到絕對路徑。在上述範例中,Mumble.class.getResource("/oops/error.jpg")
的完整資源路徑為 /oops/error.jpg
,並忽略 foo.bar
套件名稱。
將資源加入 iOS 應用程式
如要在 Xcode 中將資源檔案新增至 iOS 應用程式,請開啟建構目標的「Build Phases」分頁。接著:
- 按一下「一般」分頁下方的「+」+圖示,然後選取「新增複製檔案階段」。
- 選取 [Resources] 做為目的地 (而非 Java 資源)。
- 指定資源的目錄。
- 選取「+」+即可將檔案新增至清單。
無論使用相對資源路徑或絕對資源路徑,每個資源目錄在 Xcode 版本中都需要單獨的「複製檔案」建構階段。
範例
JreEmulation 專案有「JRE JUnit Tests」應用程式,可執行該程式庫的單元測試。選取該目標的「建構階段」,即可查看多個「複製檔案」階段,每個階段對於其資源使用的每個相對路徑各有一個階段。在這裡,ClassTest.java 會使用絕對路徑和相對路徑載入相同的資源。這個「複製檔案」建構階段會包含測試的資源: