Java 使用BufferedReader读取资源

Java 使用BufferedReader读取资源,java,jar,resources,bufferedreader,Java,Jar,Resources,Bufferedreader,我试图读取一个将包含在.JAR中的资源,但我得到了一个空指针 有关下列事项: bReader = new BufferedReader(new InputStreamReader( this.getClass().getResourceAsStream("resources/" + fileName))); 但是,使用文件可以很好地工作 bReader = new BufferedReader(new FileReader(new File("resourc

我试图读取一个将包含在.JAR中的资源,但我得到了一个空指针 有关下列事项:

bReader = new BufferedReader(new InputStreamReader(
                  this.getClass().getResourceAsStream("resources/" + fileName)));
但是,使用文件可以很好地工作

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

假设您的IDE/Maven/ANT/Gradle/build进程将在根目录下的jar中包含“resources”的内容,请尝试在“/”中查找它

更新:


确保“resources”文件夹配置为资源文件夹。

this.getClass().getResourceAsStream(“resources/”+fileName)
从类路径加载文件,作为
新文件(“resources/”+fileName)
从工作目录(eclipse中的项目根目录)加载文件。要使前一个工作正常,需要将包含
resources
dir的jar添加到类路径中

这是Spring框架项目吗?尝试:

BufferedReader bufferedReader = new BufferedReader(
          new InputStreamReader(new ClassPathResource("XML_Request.xml").getInputStream()));
要加载的资源位于src/main/resources目录中:

将“资源”文件夹设置为资源文件夹。 请尝试以下代码:

bReader = new BufferedReader(new
         InputStreamReader(getClass().getClassLoader().getResourceAsStream(fileName)))

getClassLoader().getResourceAsStream(文件名)
不同,您使用的版本是
getClass().getResourceAsStream(文件名)
使用相对于类位置的路径,而不是类路径根。您需要使用绝对路径
getClass().getResourceAsStream(“/”+文件名)
或使用
ClassLoader
版本


另外,确保“resources”在类路径上(如果您使用的是Maven,那么相对于pom.xml,它应该是“src/main/resources”)。如果是这样,您不需要在文件名中实际包含“资源”,因为这是类路径根。

这是因为reader类和要读取的文件位于不同的包中。调用
this.getClass().getrasourceastream(“资源/文件名”)
时,它将在当前读卡器类所在的包目录中搜索资源目录。如果找到了,它将搜索“文件名”文件。因此,如果您的文件不存在,它将返回null

在这种情况下,需要相应地从当前文件读取器类目录返回,然后必须给出文件的路径。要从目录返回,我们应该使用
。/

例如,如果 读卡器类包:
package com.abc.util
文件位于:
com.abc.template
然后您应该调用
getResourceAsStream()
方法,如下所示

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

你能打印出错误的堆栈跟踪吗?
this.getClass()
的完全限定名称是什么?jar中的文件在哪里?线程“AWT-EventQueue-0”java.lang.NullPointerException在java.io.Reader中的异常。(Reader.java:61)在java.io.InputStreamReader中的异常。(InputStreamReader.java:55)我正在使用Eclipse,在Eclipse中运行时,我会得到空指针。.jar与这个问题无关,只是如果最终没有创建.jar的计划,我会使用这个示例来创建一个文件。如果文件被拖放到项目文件夹中,我可以使用“/”来查找该文件,但是从可执行jar中找不到它。
bReader = new BufferedReader(new InputStreamReader(
                  this.getClass().getResourceAsStream("../template/" + fileName)));