在我的包com.foo.bar
中,我有两个文件,Config.java
和config.properties
。在Config
的顶部,我试图阅读config.properties
并设置一些内部变量:
public class Config
{
public static String foo;
public static String bar;
static
{
try
{
System.out.println("Loading");
InputStream is = Config.class.getClassLoader().getResourceAsStream("config.properties");
System.out.println("stream: " + is );
Properties props = new Properties();
props.load(is);
foo = props.getProperty("foo");
bar = props.getProperty("bar");
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
//snip...
}
尽管config.properties
文件存在于同一个包中,但我得到了这个输出:
Loading
stream: null
然后在NullPointerException
行上props.load(is)
。
我做错了什么?从一些谷歌搜索,似乎我使用正确的方法来读取文件。是因为我在一个静态区块中这样做,我有这个问题吗?
答案 0 :(得分:2)
尝试替换此行
InputStream is = Config.class.getClassLoader().getResourceAsStream("config.properties");
有了这个
InputStream is = Config.class.getResourceAsStream("config.properties");
我希望它有效:)
答案 1 :(得分:2)
替换它:
InputStream is = Config.class.getClassLoader().getResourceAsStream("config.properties");
有了这个:
InputStream is = Config.class.getResourceAsStream("config.properties");
这假设Config
。类文件和.properties当然在运行时位于同一目录中,即已部署.properties文件。将它与源文件放在同一目录中并不一定能保证这一点。