1

我尝试检索可执行 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

有人能帮助我吗?

4

3 回答 3

4

CodeSource.getLocation()给你一个URL,然后你可以创建相对于它的新 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那么你可以使用这样的习语从 URL 创建一个。

于 2012-07-23T13:09:54.253 回答
1

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

new File(new File(jarPath).getParent(), "SomeData/SomeFolder/data.xml");
于 2012-07-23T13:07:09.310 回答
1

由于您已经将路径作为字符串。您可以尝试以下方法

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

String parentFolder = new File(path).getParent();
于 2012-07-23T13:08:02.570 回答