java - 运行 .jar 时 getResourceAsStream

标签 java eclipse jar

我在 Eclipse 中有以下包结构:

MyProject
|___ src
    |___ package1
    |___ file.properties

我用两种不同的方式读取 file.properties:

prop.load(getClass().getResourceAsStream("file.properties"));

BufferedReader br = new BufferedReader(new FileReader("src/file.properties"))

file.properties可以在运行时修改,所以当我提供jar文件时,我建议用户在jar文件的同一级别创建一个src文件夹并将文件放入其中。 但是,在创建 jar 之前,我需要指定文件路径中的 src 文件夹:

prop.load(getClass().getResourceAsStream("src/file.properties"));

当 FileReader 调用仍然有效时。

如何设置一个通用文件路径,能够在两种情况下工作(eclipse/开发环境和jar/生产环境)?

谢谢

最佳答案

您可以将外部 src 目录添加到 JAR list 中的 Class-Path 条目。这将使 src 目录可供 getResource() 访问。

但是,我不知道它在运行时更改该目录的内容时会如何表现 - 从未尝试过。

仅供引用: 在 Eclipse 中读取文件有点意外地“有效”。如果您运行应用程序,Eclipse 不会构建整个 JAR 并使用它。它仅将java文件编译为.class文件并使用它们。整个应用程序仍然作为普通目录和文件而不是 JAR 文件位于文件系统上,这就是从文件读取有效的原因。

它不适用于 JAR 文件(及其内部资源),因为您无法直接从 JAR(zip) 存档中读取文件。如果您以分解的形式交付您的应用程序,它将适用于客户端以及您在 Eclipse 中的工作(并且无需额外的目录)。

关于java - 运行 .jar 时 getResourceAsStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45455319/

相关文章:

java - 当我设置背景图像时,我的按钮被隐藏

Java CMYK 到带配置文件的 RGB。输出太暗

java - 使用 jtds 连接到 SQL Server 2008 时,e.getMessage() 返回 null

java - qrgen 和 zxing 库出现 java.lang.NoSuchMethodError 异常

我想在 HTML 中运行 Java 程序

java - RNetLogo 类错误

java - 为什么在java8中使用 "default"关键字

java - Tomcat 8.0中运行的JSP如何加载非Config文件

eclipse - Scala Eclipse IDE-奇怪的行为

java - 如何限制独立执行且可通过Web应用程序执行的可运行JAR的执行。?