在conf文件夹中读取属性文件

时间:2013-12-06 11:25:48

标签: java properties nullpointerexception

我有一个位于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异常。 谁能请帮忙。 提前致谢

3 个答案:

答案 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