Java getClassLoader().getResourceAsStream(";./resources/config.properties";)返回null
大家好,我得到了错误Java getClassLoader().getResourceAsStream(";./resources/config.properties";)返回null,java,Java,大家好,我得到了错误 Caused by: java.lang.NullPointerException at java.util.Properties$LineReader.readLine(Properties.java:434) at java.util.Properties.load0(Properties.java:353) at java.util.Properties.load(Properties.java:341) at richard.file
Caused by: java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:434)
at java.util.Properties.load0(Properties.java:353)
at java.util.Properties.load(Properties.java:341)
at richard.fileupload.FileUploadController.loadProp(FileUploadController.java:48)
... 60 more
每当调用我的properties类时,这就是代码
private Properties configProp = new Properties();
@PostConstruct
public void loadProp() {
System.out.println("Loading properties");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("../resources/config.properties");
try {
configProp.load(in);
System.out.println(configProp.getProperty("destinationPDF"));
System.out.println(configProp.getProperty("destination"));
System.out.println(configProp.getProperty("fileList"));
} catch (IOException e) {
e.printStackTrace();
}
}
private String destinationPDF = configProp.getProperty("destinationPDF");
public String destination = configProp.getProperty("destination");
private String username;
错误似乎来自这一行:
InputStream in = this.getClass().getClassLoader().getResourceAsStream("../resources/config.properties");
try {
configProp.load(in);
导致此错误的原因是什么?如何解决
上面的代码,应该指向属性文件,然后从中检索三个变量的值,它并没有达到
System.out.println(configProp.getProperty("destinationPDF"));
System.out.println(configProp.getProperty("destination"));
System.out.println(configProp.getProperty("fileList
在我得到错误之前
这是我的目录结构
如您所见,属性文件位于参考资料/中,我如何获得指向该文件的链接
编辑:
好的,因此它可以很好地与文件的完整链接配合使用:
configProp.load(new FileInputStream("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/WEB-INF/config.properties"));
但是,无论我将文件放在项目中的什么位置,我都无法加载它,这是为什么?这一行没有意义:
this.getClass().getClassLoader().getResourceAsStream("../resources/config.properties")
ClassLoader.getResourceAsStream()
使用从根包开始的包路径从类路径加载资源。根包上面没有任何内容。您的config.properties文件位于classpath中的何处它看起来不像是一个maven项目,将资源移动到WEB-INF/resources,然后通过这个.getClass().getClassLoader().getResourceAsStream(“resources/config.properties”)访问它是一个使用glassfish服务器的netbeans JSF项目,我尝试了你的建议,但还是出现了同样的错误,我现在已经将其复制到src文件夹的根目录下,我使用InputStream in=this.getClass().getClassLoader().getResourceAsStream(“/config.properties”);但我仍然得到同样的错误,只是为了指出它。您可以使@Jigar Joshi建议与getServletContext()一起使用(s);代码>但我认为这不是一个好的实践(尽管许多Web框架(ab)使用Web-INF进行配置)。这种配置文件应该在WEB-INF/classes
中它所属的位置。只需将config.properties
复制到src
文件夹的根目录中即可。它将被复制到正确的位置,以便使用getResourceAsStream(“/config.properties”)
访问,而不是复制到WEB-INF,否。复制到一个位置,该位置将使它出现在生成的webapp中的WEB-INF/classes
文件夹中src
中。您是否重建并重新部署了war/分解档案?IDE是否已将config.properties文件复制到WEB-INF/classes
?单击按钮Clean and Build
。在您的Netbeans项目中查找dist
文件夹。用您最喜欢的zip工具打开war文件,告诉我们是否在其中看到WEB-INF/classes/config.properties
文件。如果这样做,只需使用this.getClass().getResourceAsStream(“/config.properties”)
或this.getClass().getClassLoader().getResourceAsStream(“config.properties”)
(注意缺少的斜杠)是的,您确实有一个dist文件夹(在Windows资源管理器中查找:D:\Documents\NetBeansProjects\printing~subversion\fileupload
清理并生成后)。在其他服务器上部署war文件时,硬编码绝对路径将不起作用。只需按照建议将config.properties
放入src
中,查看生成的war并使用我在前面的评论中提到的两种加载方法之一。