0

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

  • super_directory/
    • MyRunnableJar.jar
    • data_resources/
      • file_1.dat
      • file_2.dat
      • file_3.dat
      • nested_data_directory/
        • file_4.dat
        • file_5.dat

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

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

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

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


编辑:

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

1 回答 1

1

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

以下代码片段将为您执行此操作:

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

替换MyClass为您的main班级

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

于 2012-07-15T23:24:05.850 回答