3

我有(在java中),

rt.exec("qq.exe -i ..(some other parameters) > qq.log");//*1

当我在终端运行 qq.exe -i ..(一些其他参数)> qq.log 它工作正常并保持 qq.log 文件正确。

但是使用 rt.exec (*1) 不起作用。“ > qq.log”部分导致问题。当我删除该部分 rt.exec (*1) 有效但这次我不能有 qq.log 文件。

是什么导致了这个问题,有什么解决办法吗?

4

2 回答 2

3

rt.exec()无法执行 sh/bat 代码。它只是调用另一个程序。当您尝试使用>特定于 shell 的符号重定向 qq.exe 的输出流时,java 不知道该怎么做。

另一种方法是当您使用该exec方法执行某些程序时,获取Process返回的rt.exec(). AProcess可以为您提供应用程序的输出流、应用程序的输入流,甚至为已启动的应用程序提供错误流。

使用 InputStream,您可以通过编程方式读取 qq.exe 的结果,您只需将其写入文件即可。

于 2010-08-22T10:45:37.407 回答
0

Java 7 添加了 ProcesBuilder.Redirect 类,允许将输入/输出/错误流重定向到文件/从文件重定向。它可以这样使用:

    ProcessBuilder builder = new ProcessBuilder("cat", "/proc/meminfo");
    // Append all errors from process to log file:
    builder.redirectError(Redirect.appendTo(new File("/tmp/my.log")));
    Process process = builder.start();

使用相应的方法,您可以重定向输入和输出。完整的例子在这里:在 Java 7 中运行外部进程

于 2016-03-24T17:49:03.567 回答