问题陈述:
我在包 mycompany/configuration/file/
中有一个包含一组配置文件的 jar 文件。
我不知道文件名。
我的目的是在运行时从打包它们的 jar 文件中加载文件名,然后在我的应用程序中使用它。
据我了解:
当我使用 ClassLoader.getResources("mycompany/configuration/file/")
时,我应该获取所有配置文件作为 URL。
然而,这就是正在发生的事情:
我得到一个 URL 对象,其 URL 类似于 jar:file:/C:/myJarName.jar!mycompany/configuration/file/
你能告诉我我做错了什么吗?
最佳答案
对于你正在尝试做的事情,我认为这是不可能的。
getResource
和 getResources
用于在类加载器的类路径中查找命名资源,而不是在目录或文件夹下列出值。
因此,例如 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/