即使文件存在,也无法读取InputStream

时间:2014-05-12 02:17:24

标签: java nullpointerexception inputstream

在我的包com.foo.bar中,我有两个文件,Config.javaconfig.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)

我做错了什么?从一些谷歌搜索,似乎我使用正确的方法来读取文件。是因为我在一个静态区块中这样做,我有这个问题吗?

2 个答案:

答案 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文件。将它与源文件放在同一目录中并不一定能保证这一点。