Java中获取JAR文件中资源路径的三种方法

在 Java 中,通常使用相对于 JAR 文件根目录的路径来访问JAR文件中的资源。此外,了解如何构建这些路径以有效检索资源也非常重要。

在本教程中,我们将探索获取 Java JAR 文件中资源路径的不同方法。

1、使用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,说明资源文件定位成功。

2.使用ClassLoader.getResource()方法
或者,我们可以使用ClassLoader.getResource()方法来访问 JAR 文件中的资源。当编译时未知资源路径时,此方法很有用:

@Test
public void givenFile_whenClassLoaderUsed_thenGetResourcePath() {
    URL resourceUrl = GetPathToResourceUnitTest.class.getClassLoader().getResource("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("/myFile.txt")).toURI());
    assertNotNull(resourcePath);
}

在这里,我们首先调用getResource()方法来检索资源文​​件的 URL。然后,我们将此 URL 转换为 URI 并将其传递给Paths.get()以获取表示资源文件位置的Path对象。

当我们需要将资源文件作为Path对象使用时,这种方法很有用。它支持更高级的文件操作,例如读取文件内容或将内容写入文件。此外,它还提供了一种在Java NIO包上下文中与资源交互的便捷方法。

结论
总之,访问 Java JAR 文件中的资源对于许多应用程序至关重要。无论我们喜欢Class.getResource()的简单性、 ClassLoader.getResource()的灵活性,还是Paths.get()的现代方法,Java 都提供了各种方法来有效地完成此任务。