取得 Java JAR 檔案中資源的路徑
一、簡介
在 Java 中,通常使用相對於 JAR 檔案根目錄的路徑來存取 JAR 檔案中的資源。此外,了解如何建立這些路徑以有效檢索資源也非常重要。
在本教程中,我們將探索取得 Java JAR 檔案中資源路徑的不同方法。
2. 使用Class.getResource()
方法取得資源的 URL
Class.getResource()
方法提供了一種取得 JAR 檔案中資源的URL
的直接方法。讓我們看看如何使用這個方法:
@Test
public void givenFile_whenClassUsed_thenGetResourcePath() {
URL resourceUrl = GetPathToResourceUnitTest.class.getResource("/myFile.txt");
assertNotNull(resourceUrl);
}
在此測試中,我們呼叫GetPathToResourceUnitTest.class
上的getResource()
方法,並將資源檔案「 /myFile.txt
」的路徑作為參數傳遞。然後,我們斷言所取得的resourceUrl
不為null,表示資源檔案定位成功。
3.使用ClassLoader.getResource()
方法
或者,我們可以使用ClassLoader.getResource()
方法來存取 JAR 檔案中的資源。當編譯時未知資源路徑時,此方法很有用:
@Test
public void givenFile_whenClassLoaderUsed_thenGetResourcePath() {
URL resourceUrl = GetPathToResourceUnitTest.class.getClassLoader().getResource("myFile.txt");
assertNotNull(resourceUrl);
}
在此測試中,我們使用類別載入器GetPathToResourceUnitTest.class.getClassLoader()
來取得資源檔案。與先前的方法不同,此方法不依賴類別的套件結構。相反,它在類路徑的根級別搜尋資源檔案。
這意味著它可以定位資源,無論它們在專案結構中的位置如何,從而更靈活地存取位於類別包外部的資源。
4.使用Paths.get()
方法
從Java 7開始,我們可以使用Paths.get()
方法來取得表示JAR檔案中資源的Path
物件。就是這樣:
@Test
public void givenFile_whenPathUsed_thenGetResourcePath() throws Exception {
Path resourcePath = Paths.get(Objects.requireNonNull(GetPathToResourceUnitTest.class.getResource("/myFile.txt")).toURI());
assertNotNull(resourcePath);
}
在這裡,我們首先呼叫getResource()
方法來檢索資源文件的 URL。然後,我們將此 URL 轉換為 URI 並將其傳遞給Paths.get()
以取得表示資源檔案位置的Path
物件。
當我們需要將資源檔案當作Path
物件使用時,這種方法很有用。它支援更高級的文件操作,例如讀取文件內容或將內容寫入文件。此外,它還提供了一種在 Java NIO 套件上下文中與資源互動的便捷方法。
5. 結論
總之,存取 Java JAR 檔案中的資源對於許多應用程式至關重要。無論我們喜歡Class.getResource()
的簡單性、 ClassLoader.getResource()
的靈活性,還是Paths.get()
的現代方法,Java 都提供了各種方法來有效地完成此任務。
與往常一樣,隨附的源代碼可以在 GitHub 上找到。