java.lang.Class.getResources 的使用

发布于 2024-12-17 17:25:40 字数 591 浏览 0 评论 0原文

我今天看到了一些关于使用 java.lang.Class.getResources()java.lang.Class.getResourcesAsStream() 的帖子。不知何故,我仍然感到困惑。

我有一个包含此结构的 Jar 文件 (resources/test.xml)

这个 jar 文件位于我的应用程序的类路径上,当我调用下面的代码时,它返回 null,即值映射URL 为空。

 URL mappingURL = this.getClass().getResource("/resources/test.xml");

但是,当我将 XML 文件以分解格式存储在类路径上时,即通过创建目录“resources”并在其中存储 mapping.xml ,它就可以工作。

稍后我将使用此 URL 来读取“test.xml”文件的内容。

这是否意味着 getResources() 不是从 Jar 内部读取文件的适当方法?我不明白为什么当 Jar 文件中存在文件 (test.xml) 时 mappingURL 为 null?

I've seen some posts on using java.lang.Class.getResources() and java.lang.Class.getResourcesAsStream() on SO today. Somehow, I still have confusion.

I have a Jar file that contains this structure (resources/test.xml)

This jar file is on the classpath of my application, and when I call below piece of code, it returns null, i.e. value of mappingURL is null.

 URL mappingURL = this.getClass().getResource("/resources/test.xml");

However when I store the XML file in exploded format on the classpath i.e. by creating a directory "resources" and storing mapping.xml inside, it works.

I'm using this URL for reading the content of the "test.xml" file later.

Does that mean, getResources() is not the appropriate method for reading the files from inside a Jar? I didn't understand why mappingURL is null when file (test.xml) is present in the Jar file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

走野 2024-12-24 17:25:40

如果找不到资源,getResource() 方法将返回 null。您在资源前面加上 / 前缀,这意味着它正在尝试在文件夹中查找。您应该能够删除前导 / 并达到您的预期结果。

以下是文档中的 getResource() 方法描述:

查找具有给定名称的资源。资源是一些数据(图像、音频、文本等),可以通过类代码以独立于代码位置的方式访问。

资源的名称是标识资源的“/”分隔的路径名。

该方法首先会在父类加载器中查找资源;如果父级为空,则搜索虚拟机内置的类加载器的路径。如果失败,此方法将调用 findResource(String) 来查找资源。

The getResource() method will return null if it cannot find the resource. You are prefixing the resource with a / which means that it is trying to look in the folder. You should be able to remove the leading / and achieve your intended result.

Here is the getResource() method description from the documentation:

Finds the resource with the given name. A resource is some data (images, audio, text, etc) that can be accessed by class code in a way that is independent of the location of the code.

The name of a resource is a '/'-separated path name that identifies the resource.

This method will first search the parent class loader for the resource; if the parent is null the path of the class loader built-in to the virtual machine is searched. That failing, this method will invoke findResource(String) to find the resource.

撑一把青伞 2024-12-24 17:25:40
this.getClass().getResource("/resources/test.xml");

如果您开始使用的类文件也在同一个 JAR 文件中,那么这应该可以工作。

this.getClass().getResource("/resources/test.xml");

That should work, provided that the class file you are starting with is also in the same JAR file.

眼眸里的那抹悲凉 2024-12-24 17:25:40

这是否意味着 getResources() 不是合适的方法
从 Jar 中读取文件?

这是正确的。如果您的资源将捆绑在 jar 中,您总是需要使用 getResourceAsStream()。

一行之后,您就可以开始读取该文件:

BufferedReader reader = new BufferReader(InputStreamReader(getResourceAsStream("/test.xml")));

reader.readLine();
//...

Does that mean, getResources() is not the appropriate method for
reading the files from inside a Jar?

This is correct. If your resource will be bundled in a jar, you always want to use getResourceAsStream().

A single line later and you can start reading the file:

BufferedReader reader = new BufferReader(InputStreamReader(getResourceAsStream("/test.xml")));

reader.readLine();
//...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文