今天我在SO上看到了一些关于使用java.lang.Class.getResources()
和java.lang.Class.getResourcesAsStream()
的帖子。不知何故,我还是有些困惑。
我有一个Jar文件,其中包含这个结构(resources/test.xml)
这个jar文件位于我的应用程序的类路径上,当我调用下面的代码段时,它返回null,即mappingURL的值为null。
URL mappingURL = this.getClass().getResource("/resources/test.xml");
但是,当我在类路径上以松散格式存储XML文件时,即通过创建目录“mapping.xml”并将资源存储在其中,它可以工作。
稍后我将使用这个URL来读取"test.xml“文件的内容。
这是否意味着,getResources()
不是从Jar中读取文件的合适方法?我不明白为什么当Jar文件中存在文件(test.xml)时,mappingURL
是空的?
发布于 2011-11-22 12:45:36
如果找不到资源,getResource()
方法将返回null
。您为资源添加了一个/
前缀,这意味着它正在尝试在文件夹中查找。您应该能够删除前导/
并达到预期效果。
以下是文档中的getResource()
方法描述:
查找具有给定名称的资源。资源是可以由类代码以独立于代码位置的方式访问的一些数据(图像、音频、文本等)。
资源的名称是以“/”分隔的路径名,用于标识资源。
此方法将首先在父类加载器中搜索资源;如果父类加载器为空,则搜索内置到虚拟机的类加载器的路径。如果失败,此方法将调用findResource(String)来查找资源。
发布于 2011-11-22 12:45:45
this.getClass().getResource("/resources/test.xml");
如果您要开始的类文件也在同一个JAR文件中,那么这应该是可行的。
发布于 2011-11-22 12:56:14
这是否意味着,getResources()不是从
中读取文件的合适方法?
这是正确的。如果您的资源将被捆绑到jar中,那么您总是希望使用getResourceAsStream()
。
只需一行代码,您就可以开始读取该文件:
BufferedReader reader = new BufferReader(InputStreamReader(getResourceAsStream("/test.xml")));
reader.readLine();
//...
https://stackoverflow.com/questions/8222023
复制相似问题