我尝试检索可执行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
有人能帮助我吗?
答案 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();