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