使用runtime.exec dir参数找不到文件

时间:2010-08-19 12:50:17

标签: java

我很可能误解了Runtime.exec(String command, String[] envp, File dir)File dir参数的目的: “新子进程的工作目录由dir指定。如果dir为null,则子进程继承当前进程的当前工作目录。”

如果我运行Runtime.exec("C:/mydir/myfile.bat");脚本被执行(尽管工作目录错误)

但是,如果我运行Runtime.exec("myfile.bat", null, new File("C:/mydir"));,我会收到以下错误:

java.io.IOException: Cannot run program "myfile.bat" (in directory "C:\mydir"): CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at java.lang.Runtime.exec(Runtime.java:593)

我认为dir参数设置新进程的工作目录以及正在执行的命令,但是它可能只是前者。如果是这种情况,则异常消息具有误导性。

2 个答案:

答案 0 :(得分:3)

怎么样

Runtime.exec("C:\mydir\myfile.bat", null, new File("C:\mydir"));

来自ProcessBuilder.java

// It's much easier for us to create a high-quality error
// message than the low-level C code which found the problem.

这就是为什么你得到一个非特定的异常 - 否则JDK需要实现类似于Spring的DataAccessException层次结构的异常处理,处理操作系统特定的错误代码。

修改:您可能需要查看commons-exec

答案 1 :(得分:0)

我不知道它是否与它有关,但\用于转义字符。

我总是在Java中使用正斜杠,并且它们被正确转换。

否则我会建议总是使用\,即双斜线来避免像“C:\ newfile”那样的意外,这将是C:-newline-ewfile。