我有两种获取jar路径的方法
1)
File file = new File(new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getName());
String filename = file.getAbsolutePath().toString();
2)
String filename2 = Main.class.getProtectionDomain().getCodeSource().getLocation().toString().substring(6);
第一种方法适用于Windows和Mac,但在linux中,如果我的jar位于'/home/user/Documents/test folder/'
,它会返回我当前的工作目录+ jar文件
例如:如果我的终端位于/home/user/
,即使MyJar.jar路径为/home/user/MyJar.jar
,它也会返回'/home/user/Documents/test folder/'
。
第二种方法,对于每个操作系统,返回文件的正确路径,但空格由%20替换。
例如:/home/user/Documents/test%20folder/MyJar.jar
如何在Linux中获得绝对路径,就像我在Windows和Mac上一样,并且没有%20作为空间替换?
答案 0 :(得分:2)
我不确定为什么你在第一个解决方案中将你的File
双重包裹起来。
try {
File f = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI());
System.out.println(f.getAbsolutePath());
} catch (URISyntaxException ex) {
throw new RuntimeException(ex);
}
(仅在Linux下测试)
(我认为URISyntaxException不会被投入生产)