我正在尝试加载属性文件 我在同一目录中的属性文件与我尝试加载它的类相同 示例:
package com.classes.internal;
public class ClassA {
private static String PFILE = "config.properties";
private static void methodA(){
//do stuff
Properties properties = null;
try{
properties = new Properties();
properties.load(new FileInputStream(PFILE));
//properties.load(new ClassA().getClass().getResourceAsStream(PFILE)); --> Does not work either
}catch(Exception e){
e.printStackTrace();
}
}
同样config.properties
文件位于com \ classes \ internal目录
但我得到FileNotFoundException
或java.lang.NullPointerException
(如果使用注释掉的行而不是第一行)
我在这里做错了什么?我有什么误解?
答案 0 :(得分:2)
该文件需要位于您正在执行的目录中,而不是该类文件所在的目录。
所以如果你有目录结构
项目/ COM /类/内部
然后运行命令
Project$ java com.classes.internal.SomeClass
您的JVM将在“Project”目录中查找“config.properties”文件。
答案 1 :(得分:0)
我认为您的程序工作目录不在com \ classes \ internal中。尝试传递这个相对路径:
com\classes\internal\config.properties
或绝对路径。 你可以像这样获得当前的工作目录
String currentDir = new File(".").getAbsolutePath();
答案 2 :(得分:0)
properties.load(this.getClass().getResourceAsStream(
"/com/classes/internal/" + PFILE));
答案 3 :(得分:0)
下面的行将加载相对于工作目录的文件(在FrankieTheKneeMan示例中,“Project”文件夹。如果您在Tomcat中运行代码,很可能来自$ Tomcat / bin /):
properties.load(new FileInputStream(PFILE));
对于下面的行,它是相对于您的类路径加载文件。所以“config.properties”指的是包含“com”文件夹的目录,而不是“com / classes / internal /”。
properties.load(new ClassA().getClass().getResourceAsStream(PFILE));
因此,您需要决定是从类路径还是从工作目录加载。
答案 4 :(得分:0)
实施例。我正在使用eclipse项目结构,我希望你能得到这个图片:
//File in Project/src/com/classes/internal/config.properties
InputStream in = ClassA.class.getResourceAsStream("config.properties");
Properties p = new Properties();
try {
p.load(in);
} catch(IOException e) {
e.printStackTrace();
}
如果您决定将文件放在包裹外:
//File in Project/src/config.properties
InputStream in = ClassA.class.getClassLoader().getResourceAsStream("config.properties");
请注意,getResourceAsStream
文件必须包含在类路径中。
答案 5 :(得分:0)
直接在源文件夹中创建 config 包,并将 config.properties 文件放入其中。在构建应用程序时,它将转到/WEB-INF/classes/config/config.properties
然后,您可以使用以下代码访问属性文件 -
Properties prop = new Properties();
String propFileName = "/config/config.properties";
InputStream input = null;
input = ClassA.class.getResourceAsStream(propFileName);
prop.load(input);