1

我已经尝试了属性文件路径的变体,但似乎无法正确。

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

4

3 回答 3

5

您的代码和设置不匹配。您要求在teln.properties内部提供文件,telnproperties.propertiesteln. 请在您的问题中保持一致。

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

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 并查看其中。

于 2013-08-28T18:21:47.030 回答
1

你可以尝试更换

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

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

于 2013-08-28T18:15:42.893 回答
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$ 
于 2013-08-28T18:28:19.883 回答