java - 如何从可运行 JAR 中读取/写入外部数据资源?

标签 java command-line jar resources

我想从命令行运行MyRunnableJar.jar。它需要从 file_[1-4].dat 读取,进行一些处理,然后写入 file_5.dat。所有上述数据文件都位于文件系统中的 MyRunnableJar.jar 附近。例如:

  • super 目录/
    • MyRunnableJar.jar
    • 数据资源/
      • file_1.dat
      • file_2.dat
      • file_3.dat
      • 嵌套数据目录/
        • file_4.dat
        • file_5.dat

(MyRunnableJar.jar 是由 Eclipse 的 Export 功能创建的。)

我想这样做的原因是因为该应用程序的计算成本太高,无法在我的小型笔记本电脑上运行。相反,我想将它放在远程服务器上(包含它必须访问的所有大数据文件)并在那里运行它。

问题是,我不知道如何显示这些数据文件所在的可运行 JAR。如果需要的话,数据文件当然可以移动。然而,将它们保留在 JAR 中并不是一种选择,因为如果我想更改哪怕是一点点应用程序代码,我就必须重新传输整个 JAR,如果它包含数据文件,这将是相当大的。此外,如果 file_5.dat 实际上在我的 JAR 中,我将无法写入它。

我知道 Stack Exchange 上有很多类似的问题,但在每种情况下,问题在某些重要方面都略有不同。

<小时/>

编辑:

  • 请参阅已接受的答案。
  • 另请注意,Andre 的解决方案(在评论中进行了解释)也有效,因为在我的情况下,JAR 和数据文件在文件系统中始终位于相对于彼此的相同位置。

最佳答案

您真正需要做的是弄清楚您的 .jar 文件位于哪个目录中,无论 System.property("user.dir");是什么code> 返回或执行 MyRunnableJar.jar 的位置。您不想必须假设您当前与 MyRunnableJar.jar 位于同一目录中,如果不是,则无法计算相对目录,因为你不再知道你与那个.jar相对位置。

以下代码片段将为您完成此操作:

return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

MyClass 替换为您的 main

然后您可以使用它来构建您想要读取的目录的路径。这都是那里的蛋糕。

关于java - 如何从可运行 JAR 中读取/写入外部数据资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496316/

相关文章:

git - 彻底删除 Heroku

java - 如何通过单击超链接来运行 jar 文件 (Firefox)

java - 编译后的Jar文件包含多余的类文件

java - 无法使用类加载器建立连接

java - 数据如何存储在 MongoDB 表中?

java - 单元测试 REST 客户端——模拟服务

windows - 通过基于列位置值匹配的批处理文件删除 txt 文件中的某些行

java - 什么不适用于 ProcessBuilder 和 Daemons

linux - 如何简洁地执行 Linux 嵌套命令行?

JavaFx 可运行 JAR 导出不起作用