我想从命令行运行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,如果它包含数据文件则会非常大。此外,如果它实际上在我的JAR中,我将无法写入file_5.dat
。
我知道在Stack Exchange上有很多类似的问题,但在每种情况下,问题在某些重要方面都略有不同。
编辑:
答案 0 :(得分:1)
您真正需要做的是确定.jar
文件所在的目录,无论System.property("user.dir");
返回什么或执行MyRunnableJar.jar
的位置。您不希望假设您当前与MyRunnableJar.jar
位于同一目录中,如果您不是,则无法计算 relative 目录,因为您不知道 relative 到那个.jar
的地方。
以下代码段将为您执行此操作:
return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
将MyClass
类替换为main
然后,您可以使用它来构建要读取的目录的路径。这就是那里的蛋糕。