Java:导出到 JAR 后路径名不起作用

标签 java jar export

我已将项目导出到 eclipse 中的可运行 JAR。我的代码中有几个地方做了以下操作。

String file = "src/Files/...";
loadFile(file); // purely for example

现在该项目采用 JAR 形式,这些目录似乎不存在,并且加载这些文件失败。我非常确定我引用的文件已打包在 JAR 中。导出到 JAR 时目录是否会以任何特定方式发生变化?关于如何实现这项工作还有其他想法吗?

最佳答案

您需要将它们视为类路径资源,而不是本地磁盘文件系统路径。当您将文件打包在 JAR 中并且您也不希望依赖于工作目录时,这将不起作用。 JAR 内的文件已经是类路径的一部分。

假设您在com.example包中有一个foo.txt文件,那么您可以按如下方式获取它的InputStream

InputStream input = getClass().getResourceAsStream("/com/example/foo.txt");
// ...

或者当您处于静态上下文中时

InputStream input = SomeClass.class.getResourceAsStream("/com/example/foo.txt");
// ...

或者当你想扫描全局类路径时

InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("/com/example/foo.txt");
// ...

另请参阅:

关于Java:导出到 JAR 后路径名不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41163153/

相关文章:

java - Jetty Plugin 9启动不喜欢icu4j-2.6.1.jar

java - Spring启动Jsp文件找不到

java - ShadowJar:如何包含特定目录?

Java程序将birt报告导出到excel

generics - 如何将实例化的泛型函数导出到 C

java - 用于生产和 LTS 的 OpenJDK?

java - 限制对象创建的策略或设计模式

java - 在 Eclipse 上为我的国际象棋项目创建可运行的 jar 文件时出现奇怪的行为

java - 编译时如何通配符包含 JAR 文件?

ios - 如何使用 Swift 创建 CSV 文件