我有一个方法:
private String getProperty(String property) throws IOException,ConfigException {
// first test if the config file exists.
String propertyFile = "DataTransfer/Config/DataTransfer.properties";
if(!new File(propertyFile).exists()) {
throw new ConfigException("the config file doesn't exist." +
" Make sure the file : \""+propertyFile+"\" exists.");
}
// retrieve the property
Properties configFile = new Properties();
configFile.load(this.getClass().getClassLoader()
.getResourceAsStream(propertyFile));
String prop = configFile.getProperty(property);
return prop;
}
不幸的是,我一直在java.lang.NullPointerException
级别获得ConfigFile.load()
。
我在调试模式下检查了我的变量,它们都不是null。
我不知道这个例外的原因是什么。
答案 0 :(得分:5)
您已检查它是否作为当前工作目录中的文件存在。您尚未检查它是否存在于类路径中。
如果您知道它作为文件存在,为什么不将其作为文件加载?
如果要从类路径加载它,为什么不更改检查以确保它存在于类路径中?
基本上,您需要在检查和装载之间保持一致。
答案 1 :(得分:1)
ClassLoader#getResourceAsStream(String)将返回null
。这很可能是根本原因。
类加载,特别是在J2EE环境中,经常被误解。
答案 2 :(得分:0)
关于在J2EE环境中读取配置文件的最佳实践,我引用了这个question。
答案 3 :(得分:0)
你可以这样试试 FileInputStream infile = new FileInputStream(new File(libjavaFolder +“log4j.properties”)); if(infile!= null){ 属性logProps = new Properties(); logProps.load(infile中); infile.close(); }
答案 4 :(得分:0)
使用
configFile.load(new FileReader(new File(propertyFile)));
检查并加载相同的样式
答案 5 :(得分:0)
确保配置文件位于该特定文件夹中,并且您实际上正在查找正确的路径。我通常在加载方法之前添加这样的东西:
System.out.println(this.getClass().getClassLoader().getResource(".").getFile());
这将打印绝对路径