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

Java 如何在与应用程序的.jar文件相同的目录中打开文件?,java,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"

我试图使用相对路径的组合将.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)));

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

要找到正确jar文件的路径,可以使用以下方法:

URL url = MainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();
其中
MainClass
工具的主类,或同一jar文件中的任何其他类

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

综合起来:

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

如果
path
如您所说是
“/usr/tool”
(是吗?您应该测试
System.out.println(path);
并将结果添加到您的问题中。),为什么不编写类似于
table1=path+“/files/file.txt”
?类路径不是文件。它是目录和.jar文件的列表,其中可以找到.class文件。不清楚你在问什么。是的,用你的类名替换
MainClass