Java中獲取JAR檔案中資源路徑的三種方法

banq發表於2024-04-05

在 Java 中,通常使用相對於 JAR 檔案根目錄的路徑來訪問JAR檔案中的資源。此外,瞭解如何構建這些路徑以有效檢索資源也非常重要。

在本教程中,我們將探索獲取 Java JAR 檔案中資源路徑的不同方法。

1、使用Class.getResource()方法獲取資源的 URL
Class.getResource ()方法提供了一種獲取JAR 檔案中資源的URL的直接方法。讓我們看看如何使用這個方法:

@Test
public void givenFile_whenClassUsed_thenGetResourcePath() {
    URL resourceUrl = GetPathToResourceUnitTest.class.getResource(<font>"/myFile.txt");
    assertNotNull(resourceUrl);
}

在此測試中,我們呼叫GetPathToResourceUnitTest.class上的getResource()方法,並將資原始檔“ /myFile.txt ”的路徑作為引數傳遞。然後,我們斷言獲取到的resourceUrl不為null,說明資原始檔定位成功。

2.使用ClassLoader.getResource()方法
或者,我們可以使用ClassLoader.getResource()方法來訪問 JAR 檔案中的資源。當編譯時未知資源路徑時,此方法很有用:

@Test
public void givenFile_whenClassLoaderUsed_thenGetResourcePath() {
    URL resourceUrl = GetPathToResourceUnitTest.class.getClassLoader().getResource(<font>"myFile.txt");
    assertNotNull(resourceUrl);
}

在此測試中,我們使用類載入器GetPathToResourceUnitTest.class.getClassLoader()來獲取資原始檔。與以前的方法不同,此方法不依賴於類的包結構。相反,它在類路徑的根級別搜尋資原始檔。

這意味著它可以定位資源,無論它們在專案結構中的位置如何,從而更靈活地訪問位於類包外部的資源。

3.使用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(<font>"/myFile.txt")).toURI());
    assertNotNull(resourcePath);
}

在這裡,我們首先呼叫getResource()方法來檢索資源文​​件的 URL。然後,我們將此 URL 轉換為 URI 並將其傳遞給Paths.get()以獲取表示資原始檔位置的Path物件。

當我們需要將資原始檔作為Path物件使用時,這種方法很有用。它支援更高階的檔案操作,例如讀取檔案內容或將內容寫入檔案。此外,它還提供了一種在Java NIO包上下文中與資源互動的便捷方法。

結論
總之,訪問 Java JAR 檔案中的資源對於許多應用程式至關重要。無論我們喜歡Class.getResource()的簡單性、 ClassLoader.getResource()的靈活性,還是Paths.get()的現代方法,Java 都提供了各種方法來有效地完成此任務。
 

相關文章