获取另一个Java进程的工作目录

时间:2016-09-15 17:22:06

标签: java windows process java-8 working-directory

我可以使用以下代码获取当前Java程序的工作目录: Path path = Paths.get(*ClassName*.class.getProtectionDomain().getCodeSource().getLocation().toURI());

此外,我可以使用此命令wmic process get CommandLine where name='java.exe' /value

获取运行Java进程的CommandLine参数(但输出中没有目录)

可以获得另一个Java进程的工作目录(更好地以编程方式)?可能用一些jdk / bin实用程序可以解决它?

1 个答案:

答案 0 :(得分:2)

您可以通过Attach API获取此信息。要使用它,您必须将jdk的tools.jar添加到类路径中。然后,以下代码将打印所有已识别的JVM进程的当前工作目录:

for(VirtualMachineDescriptor d: VirtualMachine.list()) {
    System.out.println(d.id()+"\t"+d.displayName());
    try {
        VirtualMachine vm = VirtualMachine.attach(d);
        try(Closeable c = vm::detach) {
            System.out.println("\tcurrent dir: "+vm.getSystemProperties().get("user.dir"));
        }
    }
    catch(AttachNotSupportedException|IOException ex) {
        System.out.println("\t"+ex);
    }
}