我在 Java EE 应用程序中有这段代码用于读取属性文件。
尽管 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();
}
}
最佳答案
该代码是否有效取决于在您的代码中加载由 getClass()
表示的调用类的类加载器是否可以访问 /WEB-INF/classes
.显然,有问题的类本身不在 /WEB-INF/classes
中,或者有一个副本放置在类路径中的其他地方,并且 Linux 环境中使用的服务器制造/版本使用稍微不同的类加载器层次结构比在 Windows 环境中使用的服务器制造/版本。
事实是,如果你不能保证属性文件是由与调用类相同的类加载器加载的,那么你不应该尝试通过调用类的类加载器来获取它,而应该通过上下文类来获取它当前线程的加载器。它可以访问所有内容。
prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("Myservice.properties"));
请注意,对于此类加载器,路径不能是相对的。所以不要以斜杠开头。
关于linux - InputStreamReader getResourceAsStream 可以在 Linux 中运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556750/