当前位置: 首页 > 面试题库 >

从src / main / resources读取会给出NullPointerException

乜裕
2023-03-14
问题内容

在我的Maven项目中,我在src / main / resources中有一个xls文件。当我这样阅读时:

 InputStream in = new
 FileInputStream("src/main/resources/WBU_template.xls");

一切都好。

但是我想使用getResourceAsStream将其作为InputStream读取。当我执行此操作时,无论是否使用斜线,我总会得到NPE。

     private static final String TEMPLATEFILE = "/WBU_template.xls";
     InputStream in = this.getClass.getResourceAsStream(TEMPLATEFILE);

不管斜线是否存在,或者如果我使用getClassLoader()方法,我仍然会得到一个NullPointer。

我也尝试过这个:

URL u = this.getClass().getResource(TEMPLATEFILE);
System.out.println(u.getPath());

控制台说… / target / classes / WBU_template.xls,然后获取我的NullPointer。

我究竟做错了什么 ?


问题答案:

FileInputStream将从Java进程的工作目录中加载相对于您传递给构造函数的文件路径。

getResourceAsStream()将从应用程序的类路径加载相对的文件路径。

使用.getClass().getResource(fileName)它时,它会认为fileName的位置与调用类的位置相同。

使用.getClass().getClassLoader().getResource(fileName) 它时,它会认为fileName的位置是根目录-
换句话说,就是bin文件夹。

src/main/resources使用Class loader载入时,文件应位于

简而言之,您必须根据情况.getClass().getClassLoader().getResource(fileName)加载文件。



 类似资料:
  • 我有一个maven Spring项目,里面有文件。如何在SpringMVC控制器中读取它。 我正在使用 但是is.

  • 我在我的maven项目中的src/main/资源下放置了一个文件,文件名只是temp.txt. 当我试图打开文件时: 我得到一个错误: src/main/资源下的所有文件都放在maven下类路径的根文件夹中。那么为什么程序不能在这里找到文件呢?

  • 我在论坛上搜索了我的问题的答案,但我找不到。我的问题是: 我有两个项目:项目A和项目B。ProjectB使用ProjectA。在ProjectA中,我有两个文件夹:/src/main/resources和/src/test/resource。在ProjectB中,我运行:mvn clean install。我希望,在测试阶段,ProjectB中的类使用/src/test/resources中的资源

  • 我正在为我的maven项目添加一个可执行的jar测试。我已经编辑了pom文件,以使用src/main/resources中的一个主类。但是,当我尝试运行jar时,它找不到我的主类。有什么想法吗?

  • 我有一个目录结构如下的maven模块,我想在中获取的路径 我使用进行了尝试,但它给出了一个空值。 无法获取资源的路径

  • 我为每个生成环境都有一个自定义属性文件夹。我已经为它定义了配置文件并添加了不同的文件夹。它们会被正确地捡起来。但是,src/main/resources中的资源没有被拾取。如果netbeans 8有什么不同的话,我会使用它。我的问题是一旦激活了不同的概要文件,是否需要在概要文件中重新指定主要资源或测试资源?多谢了。 我正在使用Maven开发一个java web项目。有一些web服务的xml文件(h