java - 为 ProcessBuilder 设置工作目录不起作用

标签 java runtime processbuilder

我正在尝试使用 ProcessBuilder 运行位于 C:/Software/的名为 test.pdf 的文件。以下是我的代码

public static void main(String[] args) throws IOException {

         ProcessBuilder pb = new ProcessBuilder("test.pdf");
         pb.directory(new File("C:/Software/"));
         pb.start();

    }

我得到以下异常。

Exception in thread "main" java.io.IOException: Cannot run program "test.pdf" (in directory "C:\Software"): CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(Unknown Source)
    at com.test.Test.main(Test.java:12)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 2 more

我检查了这个How to set working directory with ProcessBuilder计算器中的线程。但是没有任何运气。任何人都可以帮忙吗?谢谢

最佳答案

使用下面的代码:

        String fileToOpen = "test.pdf";
        List<String> command = new ArrayList<String>();
        command.add("rundll32.exe");
        command.add("url.dll,FileProtocolHandler");
        command.add(fileToOpen);

        ProcessBuilder builder = new ProcessBuilder();
        builder.directory(new File("C://Software//"));
        builder.command(command);

        builder.start();

它将打开您的 pdf。
如果要打开同一目录下的其他文件,只需更改文件名即可。

关于java - 为 ProcessBuilder 设置工作目录不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51441802/

相关文章:

java - Spring bean 创建失败。 setter 的参数类型可以是 getter 返回类型的父级吗?

delphi - 从类引用创建的表单中执行方法 (Delphi)

java - Python 脚本未在 Java 中输出

java - ProcessBuilder/Runtime.exec() 与 Weka 命令行演示特殊行为

java - 有没有办法从 android 进程中全局获取 "ApplicationContext"或上下文的类加载器?

java - 如果条件与 SQL 不匹配,则根据列生成更多行

java - Optaplanner - benchmarkConfigResource 不作为类路径资源存在于类加载器中

runtime - 如何在运行时获取指向 elf .symtab 的指针?

java - "we change behavior of any object at runtime in java"是什么意思

java - 在 Java 7 中使用 ProcessBuilder 构建流程管道