如何获取运行jar文件所在目录的路径?

时间:2012-07-23 13:02:59

标签: java path directory executable

我尝试检索可执行jar文件所在目录的路径。 这意味着:我有以下结构:

 --> Application (this is a folder somewhere in my file system)
     --> application.jar (this is my java application
     --> SomeData (folder in the same directory like the application)
         --> some other folders
         ......

当我通过命令行启动我的application.jar时,我想解析SomeData文件夹中的一些文件。 在https://stackoverflow.com/a/320595/1540630中,他们已经展示了如何获取正在运行的jar文件的当前路径,但是当我执行语句时:

System.out.println(XMLParser.class.getProtectionDomain().getCodeSource().getLocation().getPath());

...我刚刚得到以下内容:

/.../Application/application.jar

但我只想拥有:

/.../Application/

最好在后面的步骤中说明我需要

/.../Application/SomeData/SomeFolder/data.xml

有人能帮助我吗?

3 个答案:

答案 0 :(得分:4)

CodeSource.getLocation()为您提供URL,然后您可以创建相对于此的新网址:

URL jarLocation = XMLParser.class.getProtectionDomain().getCodeSource().getLocation();
URL dataXML = new URL(jarLocation, "SomeData/SomeFolder/data.xml");

不能只执行new File(...getCodeSource().getLocation().getPath()),因为不保证URL路径在所有平台上都是有效的本机文件路径。如果可以,您可以更加安全地使用URL并将URL直接传递给XML解析器,但如果您确实需要java.io.File,则可以使用an idiom like this从URL创建URL。

答案 1 :(得分:1)

一旦你有了jar的位置,就可以使用

new File(new File(jarPath).getParent(), "SomeData/SomeFolder/data.xml");

答案 2 :(得分:1)

因为您已经将路径作为字符串。您可以尝试以下

String path = XMLParser.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 

String parentFolder = new File(path).getParent();