【发布时间】:2016-09-15 17:22:05
【问题描述】:
我可以使用以下代码获取当前 Java 程序的工作目录:
Path path = Paths.get(*ClassName*.class.getProtectionDomain().getCodeSource().getLocation().toURI());
我还可以使用此命令wmic process get CommandLine where name='java.exe' /value获取运行 Java 进程的命令行参数(但输出中没有目录)
是否可以获取另一个 Java 进程的工作目录(以编程方式更好)?大概可以用一些 jdk/bin 实用程序来解决?
【问题讨论】:
-
ClassName.class.getProtectionDomain().getCodeSource().getLocation().toURI() 在某些情况下会失败。如果你想要当前目录,为什么不直接使用
System.getProperty("user.dir")? -
getProtectionDomain().getCodeSource().getLocation()将为您提供代码位置(顾名思义),它不一定与工作目录相同。当考虑到不同的类有不同的代码源时,这应该是显而易见的。此外,通过Paths.get将该位置转换为Path仅在它是file:URI 的情况下才有效,但会失败,例如对于 jar 文件中包含的类。如果你想要一个Path代表工作目录,Paths.get("")就足够了,如果你想知道它当前的绝对路径,那么使用Paths.get("").toAbsolutePath()...
标签: java windows process java-8 working-directory