我正在尝试读取将包含在.JAR中的资源,但我得到了一个nullPointer 对于以下内容:
bReader = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("resources/" + fileName)));
然而,使用文件,工作正常..
bReader = new BufferedReader(new FileReader(new File("resources/" + fileName)));
答案 0 :(得分:17)
假设您的IDE或Maven或构建过程将在jar中包含“资源”的内容,请尝试在“/".
中找到它。bReader = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("/" + fileName)));
<强>更新强>
确保将“resources”文件夹配置为源文件夹。
答案 1 :(得分:2)
这是一个Spring框架项目吗?试试:
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(new ClassPathResource("XML_Request.xml").getInputStream()));
要加载的资源位于src / main / resources目录中:
答案 2 :(得分:1)
将“resources”文件夹设置为资源文件夹。 试试这段代码:
bReader = new BufferedReader(new
InputStreamReader(getClass().getClassLoader().getResourceAsStream(fileName)))
答案 3 :(得分:0)
与getClassLoader().getResourceAsStream(filename)
不同,您使用的版本getClass().getResourceAsStream(filename)
使用相对于类位置的路径,而不是类路径根。您需要使用绝对路径getClass().getResourceAsStream("/" + filename)
或使用ClassLoader
版本。
另外,请确保&#34;资源&#34;在你的类路径上(如果你使用Maven,它应该是&#34; src / main / resources&#34;相对于你的pom.xml)。如果是这样,您就不需要实际包含&#34;资源&#34;在你的文件名中,因为那是类路径根目录。
答案 4 :(得分:0)
这是因为阅读器类和要读取的文件位于不同的程序包中。调用this.getClass().getRasourceAsStream("resource/file_name")
时,它将在当前读取器类所在的包目录中搜索资源目录(如果找到),然后它将搜索“ file_name”文件。因此,如果您的文件不存在,它将返回null。
在这种情况下,您需要相应地从当前文件阅读器类目录返回,然后必须提供文件的路径。要从目录返回,我们应该使用../
例如,如果
读者班级套餐:package com.abc.util;
文件存在于:com.abc.template;
然后,应按以下方式调用getResourceAsStream()
方法。
bReader = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("../template/" + fileName)));
答案 5 :(得分:-1)
this.getClass().getResourceAsStream("resources/" + fileName)
从类路径加载文件,因为new File("resources/" + fileName)
从您的工作目录(eclipse中的项目根目录)加载文件。要使前者工作,您需要将包含resources
dir的jar添加到类路径中。