java 文件管道_java – 如何将进程输出管道传输到Windows和JDK 6u45上的文件

我有以下

Windows批处理文件(run.bat):

@echo off

echo hello batch file to sysout

以下java代码,它运行批处理文件并将输出重定向到文件:

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

System.out.println("Current java version is: " + System.getProperty("java.version"));

ProcessBuilder pb =

new ProcessBuilder("cmd.exe", "/c",

"run.bat"

,">>", "stdout.txt","2>>", "stderr.txt"

);

System.out.println("Command is: " + pb.command());

Process proc = pb.start();

InputStream in = proc.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(in));

String line = null;

while ((line = reader.readLine()) != null) {

System.out.println(line);

}

int exitValue = proc.exitValue();

System.out.println("Exit value: " + exitValue);

}

在JDK上,包括JDK6u43,我得到以下输出:

Current java version is: 1.6.0_29

Command is: [cmd.exe, /c, run.bat, >>, stdout.txt, 2>>, stderr.txt]

Exit value: 0

并将脚本输出写入文件.

从JDK 6u45和7开始,我得到以下输出:

Current java version is: 1.6.0_45

Command is: [cmd.exe, /c, run.bat, >>, stdout.txt, 2>>, stderr.txt]

hello batch file to sysout

Exit value: 0

并且没有任何内容写入输出文件.

在输出重定向到文件的Windows上启动进程的正确方法是什么?

注意:在实际场景中,要执行的命令可能包含带空格的参数,如:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c",

"run.bat", "Some Input With Spaces",

">>", "stdout.txt","2>>", "stderr.txt");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值