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

Get working directory of another Java process

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

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

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

是否可以获取另一个 Java 进程的工作目录(更好的编程方式)?也许可以用一些 jdk/bin 实用程序来解决?

您可以通过 Attach API 获取此信息。要使用它,您必须将 jdk 的 tools.jar 添加到 class 路径。然后,下面的代码将打印所有已识别的 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);
    }
}