Java 使用BufferedReader读取资源
我试图读取一个将包含在.JAR中的资源,但我得到了一个空指针 有关下列事项: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
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)));