windows 从Java运行Echo

cs7cruho  于 2022-11-18  发布在  Windows
关注(0)|答案(3)|浏览(243)

我正在试用Runtime.exec()方法来运行命令行进程。
我编写了这个示例代码,它运行时没有问题,但在c:\tmp.txt中没有生成文件。

String cmdLine = "echo foo > c:\\tmp.txt";
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(cmdLine);

BufferedReader input = new BufferedReader(
                           new InputStreamReader(pr.getInputStream()));
String line;

StringBuilder output = new StringBuilder();
while ((line = input.readLine()) != null) {
    output.append(line);
}

int exitVal = pr.waitFor();

logger.info(String.format("Ran command '%s', got exit code %d, output:\n%s", cmdLine, exitVal, output));

输出为
信息21-04 20:02:03,024-运行命令“echo foo〉c:\tmp.txt”,得到退出代码0,输出:foo〉c:\tmp.txt文件

vfh0ocws

vfh0ocws1#

echo不是Windows下的独立命令,而是嵌入在cmd.exe中。
我认为您需要调用类似“cmd. exe/C echo..."的命令。

zmeyuzjn

zmeyuzjn2#

echo在命令行中运行时,>由shell解释,并且是shell创建文件。
当您在Java中使用它时,没有shell,并且该命令视为参数的内容是:
"foo > c:\tmp.txt"
(您可以从执行输出中确认)

irlmq6kh

irlmq6kh3#

您不能只是将“〉c:\tmp.txt”作为命令行的一部分传递给Runtime.exec来进行重定向。其所有标准io(即stdin、stdout、stderr)操作将通过三个流(getOutputStream()、getInputStream()、getErrorStream())重定向到父进程。
如果要将输出重定向到一个文件,据我所知,唯一的方法是在Java中打开该文件,执行getInputStream,然后从进程的输入流中读取并写入所需的文件。

相关问题