InputStreamReader getResourceAsStream会在Linux中运行吗?

时间:2011-12-19 03:13:30

标签: linux java-ee properties

我在Java EE应用程序中使用此代码来读取Properties文件。 即使Myservice.properties放在WEB-INF/classes文件夹下,但在Linux环境中也没有读取这些属性,但它在Windows环境中运行良好。

InputStreamReader fMainProp = new InputStreamReader(this.getClass().getResourceAsStream("/Myservice.properties"));

上述内容是否仅适用于Windows?

MyWeb() {
    prop = new Properties();
    try {
        InputStreamReader fMainProp = new InputStreamReader(this.getClass().getResourceAsStream("/Myservice.properties"));
        prop.load(fMainProp);
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:4)

代码是否有效取决于在代码中加载由getClass()表示的调用类的类加载器是否可以访问/WEB-INF/classes。显然,有问题的类本身不在/WEB-INF/classes内,或者有一个副本放在类路径的其他地方,并且Linux环境中使用的服务器make / version使用的服务器类型与使用的服务器make /版本稍有不同在Windows环境中。

事实是,如果您不能保证属性文件由与调用类相同的类加载器加载,那么您不应该尝试通过调用类的类加载器来获取它,而是通过当前线程的上下文类加载器。它可以访问所有内容。

prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("Myservice.properties"));

请注意,使用此类加载器,路径不能是相对的。所以不要从一个领先的斜线开始。