java配置文件

时间:2009-11-19 11:04:48

标签: java java-ee

我有一个方法:

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。

我不知道这个例外的原因是什么。

6 个答案:

答案 0 :(得分:5)

您已检查它是否作为当前工作目录中的文件存在。您尚未检查它是否存在于类路径中。

如果您知道它作为文件存在,为什么不将其作为文件加载?

如果要从类路径加载它,为什么不更改检查以确保它存在于类路径中?

基本上,您需要在检查和装载之间保持一致。

答案 1 :(得分:1)

如果ClassLoader层次结构无法找到资源,则

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());

这将打印绝对路径