我有一个位于conf文件夹下的属性文件。 conf文件夹位于项目根目录下。我使用以下代码。
public class PropertiesTest {
public static void main(String[] args) {
InputStream inputStream = PropertiesTest.class
.getResourceAsStream("/conf/sampleprop.conf");
Properties prop = new Properties();
try {
prop.load(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(prop.getProperty("TEST"));
}
}
但是我得到了nullpointer异常。
我尝试过使用
InputStream inputStream = PropertiesTest.class
.getResourceAsStream("./conf/sampleprop.conf");
和
InputStream inputStream = PropertiesTest.class
.getResourceAsStream("conf/sampleprop.conf");
但所有结果都是nullpointer异常。 谁能请帮忙。 提前致谢
答案 0 :(得分:1)
首先尝试恢复您的工作目录:
String workingDir = System.getProperty("user.dir");
System.out.println("Current working dir: " + workingDir);
然后很简单:
Properties propertiesFile = new Properties();
propertiesFile.load(new FileInputStream(workingDir+ "/yourFilePath"));
String first= propertiesFile.getProperty("myprop.first");
问候,法比奥
答案 1 :(得分:0)
getResourceAsStream()
方法尝试使用调用它的类的ClassLoader来定位和加载资源。理想情况下,它只能将文件定位到类文件夹中。相反,您可以将FileInputStream
与相对路径一起使用。
修改强>
如果conf
文件夹位于src下,那么您仍然可以使用getResourceAsStream()
InputStream inputStream = Test.class
.getResourceAsStream("../conf/sampleprop.conf");
路径与您调用getRes..
方法的类相对。
如果不是
try {
FileInputStream fis = new FileInputStream("conf/sampleprop.conf");
Properties prop = new Properties();
prop.load(fis);
System.out.println(prop.getProperty("TEST"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
注意:这仅适用于独立应用程序/在eclipse中。如果它的基于Web(例如,根将是Tomcat / bin)
,这将不起作用我建议在指定的地方复制配置文件,然后就可以轻松访问了。在某种程度上,如果您始终复制文件'tomcat` root或application root,则可以使用System.getProperty(“user.dir”)'。但是如果外部方使用的文件,理想的是复制到可配置文件夹(C:\ appconf)
答案 2 :(得分:0)
你的代码就像一个魅力!但是您可能必须将项目根目录添加到类路径中。
如果您使用Maven,请将配置放在src / main / resources / conf / sampleprop.conf中
直接调用java时,使用java -classpath参数添加项目根目录。类似的东西:
java -classpath /my/classes/dir:/my/project/root/dir my.Main