【问题标题】:Setting working directory for ProcessBuilder is not working为 ProcessBuilder 设置工作目录不起作用
【发布时间】:2023-03-17 13:28:01
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

    标签: java runtime processbuilder


    【解决方案1】:

    使用下面的代码:

            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 文件。
    如果要打开同一目录中的其他文件,只需更改文件名即可。

    【讨论】:

    • 感谢您的回答。但我的意图是将当前工作目录更改为其他目录,以便我可以从该目录执行一些命令。这就是我使用 ProcessBuilder 的原因。
    • 使用 ProcessBuilder 打开 pdf 的更新答案。
    猜你喜欢
    • 2012-01-14
    • 2021-11-07
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多