从同一个包读取属性lang.NullPointerException

时间:2013-08-28 18:11:02

标签: java file-io properties configuration nullpointerexception

我在属性文件的路径上尝试了变体,但似乎无法使其正确。

Here's the structure:

src/
├── properties.properties
└── teln
    ├── ConnectMUD.java
    ├── IOUtil.java
    └── PropertiesReader.java

和错误:

run:
Exception in thread "main" java.lang.NullPointerException
    at java.util.Properties$LineReader.readLine(Properties.java:434)
    at java.util.Properties.load0(Properties.java:353)
    at java.util.Properties.load(Properties.java:341)
    at teln.PropertiesReader.getProps(PropertiesReader.java:16)
    at teln.ConnectMUD.main(ConnectMUD.java:18)

和有问题的课程:

package teln;


import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class PropertiesReader {

    private static final Logger LOG = Logger.getLogger(PropertiesReader.class.getName());
    private static Properties props = new Properties();

    public static Properties getProps() {
        try {
            props.load(PropertiesReader.class.getResourceAsStream("/teln/teln.properties"));
        } catch (IOException ex) {
            Logger.getLogger(PropertiesReader.class.getName()).log(Level.SEVERE, null, ex);
        }
        LOG.fine(props.toString());
        return props;
    }
}

项目为Teln,包裹为teln(可能不是很好的选择)。

另见:https://stackoverflow.com/a/8285636/262852

3 个答案:

答案 0 :(得分:4)

您的代码和设置不匹配。您在teln.properties内要求teln文件,但在properties.properties之外显示teln个文件。请在你的问题中保持一致。

Class#getResource(String)的javadoc说明了一切。

ClassLoader将查看类路径的根(您可以在Netbeans配置中定义类路径)。

使用类似

的Netbeans设置
src/
├── properties.properties
└── teln
    ├── ConnectMUD.java
    ├── IOUtil.java
    └── PropertiesReader.java

我们可以假设类路径根目录是

properties.properties
teln/ConnectMud.class
teln/IOUtil.class
teln/PropertiesReader.class

如果你想获得properties.properties资源,你需要得到它

 props.load(PropertiesReader.class.getResourceAsStream("/properties.properties"));

带前缀的/表示相对于类路径根目录的路径。如果您已经忽略了它,那么该方法将查看类PropertiesReader所在的包的根。

线索:如果您不确定您的类路径是什么,请使用Netbeans编译项目的Jar并查看其中。

答案 1 :(得分:1)

您可以尝试更换

吗?
  

props.load(PropertiesReader.class.getResourceAsStream( “/ TELN / teln.properties”));

  

props.load(PropertiesReader.class.getResourceAsStream( “/ TELN / teln.properties”));

答案 2 :(得分:1)

这有效:

props.load(PropertiesReader.class.getResourceAsStream("/connection.properties"));

具有这种结构:

thufir@dur:~/NetBeansProjects/Teln$ 
thufir@dur:~/NetBeansProjects/Teln$ tree src/
src/
├── connection.properties
└── teln
    ├── ConnectMUD.java
    ├── IOUtil.java
    └── PropertiesReader.java

1 directory, 4 files
thufir@dur:~/NetBeansProjects/Teln$