如何在与应用程序的.jar文件相同的目录中打开文件?

时间:2016-10-29 08:47:06

标签: java

我尝试使用相对路径的组合将.txt文件加载到java中的arrayList中。 我的jar文件位于/usr/tool/dist/tool.jar中 我要加载的文件位于/usr/tool/files/file.txt

我认为我能够检索tool.jar的路径,但是如何从该路径转到我的文件所在的路径?

我有以下代码

// String path should give me '/usr/tool'
File f = new File(System.getProperty("java.class.path"));
File dir = f.getAbsoluteFile().getParentFile();
String path = dir.toString();
String table1 = this should represent /usr/tool/files/file.txt
BufferedReader buf_table1 = new BufferedReader(new FileReader(new File(table1)));

1 个答案:

答案 0 :(得分:2)

要查找正在执行的jar文件的路径,java.class.path不是正确的属性。此属性可能包含多个文件,您无法知道哪个文件是正确的。 (See the docs.

要查找正确jar文件的路径,可以改为使用:

URL url = MainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();

工具的主要类别MainClass,或同一jar文件中的任何其他类。

接下来,文件的父File是其目录。因此File的父/usr/tool/dist/tool.jar/usr/tool/dist/。因此,如果您想要访问/usr/tool/files/file.txt,则需要获取父级的父级,然后从files/file.txt获取。{/ p>

把它放在一起:

File jarFile = new File(MainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
File file = new File(jarFile.getParentFile().getParent(), "files/file.txt");