使用BufferedReader读取资源

时间:2013-03-03 17:18:44

标签: java jar resources bufferedreader

我正在尝试读取将包含在.JAR中的资源,但我得到了一个nullPointer 对于以下内容:

bReader = new BufferedReader(new InputStreamReader(
                  this.getClass().getResourceAsStream("resources/" + fileName)));

然而,使用文件,工作正常..

bReader = new BufferedReader(new FileReader(new File("resources/" + fileName)));

6 个答案:

答案 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目录中:

Resource to load is sitting in the src/main/resources directory

答案 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添加到类路径中。