繁体   English   中英

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

[英]How to read/write external data resource from within runnable JAR?

我想从命令行运行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和数据文件在文件系统中始终相对于彼此处于同一位置。

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

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

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

用您的main类替换MyClass

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM