java - 如何在 jar 文件中使用 ClassLoader.getResources()

标签 java jar classloader

问题陈述:
我在包 mycompany/configuration/file/ 中有一个包含一组配置文件的 jar 文件。
我不知道文件名。
我的目的是在运行时从打包它们的 jar 文件中加载文件名,然后在我的应用程序中使用它。
据我了解: 当我使用 ClassLoader.getResources("mycompany/configuration/file/") 时,我应该获取所有配置文件作为 URL。
然而,这就是正在发生的事情:
我得到一个 URL 对象,其 URL 类似于 jar:file:/C:/myJarName.jar!mycompany/configuration/file/
你能告诉我我做错了什么吗?

最佳答案

对于你正在尝试做的事情,我认为这是不可能的。

getResourcegetResources 用于在类加载器的类路径中查找命名资源,而不是在目录或文件夹下列出值。

因此,例如 ClassLoader.getResources("mycompany/configuration/file/Config.cfg") 将返回 Config.cfg 中存在的所有文件 <类加载器类路径中的 strong>mycompany/configuration/file 路径(我发现这对于个人加载版本信息特别有用)。

在你的情况下,我认为你可能几乎有一半的解决方案。您返回的 URL 包含源 jar 文件 (jar:file:/C:/myJarName.jar)。您可以使用此信息破解打开 jar 文件并读取条目列表,过滤名称以“mycompany/configuration/file/”开头的条目。

从那里,您可以返回到 getResource 方法来加载对每个资源的引用(现在您已经有了名称和路径)

关于java - 如何在 jar 文件中使用 ClassLoader.getResources(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11516655/

相关文章:

java - 如何在vscode中使用相对路径为eclipse Java项目添加引用的库JAR文件

java - 2个jar库如何独立使用log4j?

java - 将 unicode 的 ASCII 表示形式转换为 unicode

java - 如何用 Java 编写 GMM(高斯混合模型)?

java - 如何通过 Java 小程序将图像文件保存在服务器上?

javassist:重命名类和字段类型

Java,获取实现特定接口(interface)的 URLClassLoader 可用的所有类

java - 部署到 Heroku 的 Spring Boot 应用程序找不到它的“thymeleaf View ”

java - 如何从war文件运行特定的类?

java - 是什么导致了 java.lang.InternalError(它扩展了 VirtualMachineError)