我在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();
}
}
答案 0 :(得分:4)
代码是否有效取决于在代码中加载由getClass()
表示的调用类的类加载器是否可以访问/WEB-INF/classes
。显然,有问题的类本身不在/WEB-INF/classes
内,或者有一个副本放在类路径的其他地方,并且Linux环境中使用的服务器make / version使用的服务器类型与使用的服务器make /版本稍有不同在Windows环境中。
事实是,如果您不能保证属性文件由与调用类相同的类加载器加载,那么您不应该尝试通过调用类的类加载器来获取它,而是通过当前线程的上下文类加载器。它可以访问所有内容。
prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("Myservice.properties"));
请注意,使用此类加载器,路径不能是相对的。所以不要从一个领先的斜线开始。