在每个人都告诉我这是重复之前,请听我说......
当你需要从正在运行的jar(= path to self)内部的绝对可执行路径时,无论当前的工作目录如何,在过去(Java 6 JRE 1.6),这曾经像魅力一样工作:
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
现在在Java 7(JRE 1.7)中,这只是返回" ./"。如果你想测试它,你需要创建一个可运行的jar,因为从源代码编译时,你将获得预期的路径。
这让我很生气,因为我一直在寻找一个似乎永恒的解决方案。我使用硬编码绝对路径,但显然这意味着jar不可移植。
有谁知道该怎么做?
感谢!!!
答案 0 :(得分:0)
在导出我的一个旧Java 6项目之后偶然发现了同样的问题,这些项目也使用相同的方法来获取执行路径。 这是一个快速的解决方法(替换' Start.class'与您的班级名称或使用' getClass()'):
String path = Start.class.getProtectionDomain().getCodeSource().getLocation().getPath();
path = new File(rootFolder).getAbsolutePath();
最有可能的是,你最终会得到一个以句号结尾的路径。所以你可能想用以下方法解决这个问题:
if (path.endsWith(".")) path = path.substring(0, path.length() - 1);
在Windows 7 64位和Xubuntu 14.04上使用Oracle JRE 7进行测试