linux - InputStreamReader getResourceAsStream 可以在 Linux 中运行吗?

标签 linux jakarta-ee properties

我在 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/

相关文章:

java - 创建 war 文件

linux - 没有从第一个变量中删除空格

java - 测试我的简单 HTTPS 服务器的客户端

java - 我应该如何在分层的 Java EE 应用程序中设计插件系统?

ios - 你在哪里初始化 View Controller 中的属性值?

linux - 哪个不显示可执行文件的实际运行位置

linux - 如何将 linux 可执行文件(二进制)转换为 windows exe 文件?

java - 如何在 Tomcat 上的多个 Web 应用程序中处理共享 native 库

java - Spring MVC - jar 文件是否可以引用不在 jar 文件中的属性文件?

java - Scala:加载 Java 属性