如何解决使用System.setOut重定向Runtime.getRuntimeexec输出;
Runtime.exec的标准输出不会自动发送到调用方的标准输出。
要做这样的事情-
访问派生进程的标准输出,读取然后将其写出。请注意,使用getInputStream()
Process实例的方法,派生流程的输出对父级可用。
public static void main(String[] args) throws Exception {
System.setOut(new PrintStream(new FileOutputStream("test.txt")));
System.out.println("HelloWorld1");
try {
String line;
Process p = Runtime.getRuntime().exec( "echo HelloWorld2" );
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()) );
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
}
catch (Exception e) {
// ...
}
}
解决方法
我有一个程序Test.java:
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
System.setOut(new PrintStream(new FileOutputStream("test.txt")));
System.out.println("HelloWorld1");
Runtime.getRuntime().exec("echo HelloWorld2");
}
}
应该将HelloWorld1和HelloWorld2打印到文件text.txt中。但是,当我查看文件时,只能看到HelloWorld1。
-
HelloWorld2去了哪里?它消失在稀薄的空气中了吗?
-
可以说我也想将HelloWorld2重定向到test.txt。我不能仅在命令中添加“ >> test.txt”,因为会出现文件已打开错误。那么我该怎么做呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。