我正在从 java 运行命令行命令:
ping localhost > output.txt
该命令通过 Java 发送,如下所示:
Process pr = rt.exec(command);
由于某种原因,该文件没有创建,但是当我从命令行本身运行此命令时,该文件确实创建并且输出在该文件中。
为什么 java 命令不创建文件?
我正在从 java 运行命令行命令:
ping localhost > output.txt
该命令通过 Java 发送,如下所示:
Process pr = rt.exec(command);
由于某种原因,该文件没有创建,但是当我从命令行本身运行此命令时,该文件确实创建并且输出在该文件中。
为什么 java 命令不创建文件?
因为您尚未将其定向到文件。
在命令行上,您已请求将其重定向到文件。您必须在 Java 中通过 Process 对象提供的 InputStream(对应于实际流程的输出流)来执行相同的操作。
以下是如何从流程中获取输出。
InputStream in = new BufferedInputStream( pr.getInputStream());
您可以从这里读取直到 EOF,并将输出写入文件。如果您不希望该线程阻塞,请从另一个线程读取和写入。
InputStream in = new BufferedInputStream( pr.getInputStream());
OutputStream out = new BufferedOutputStream( new FileOutputStream( "output.txt" ));
int cnt;
byte[] buffer = new byte[1024];
while ( (cnt = in.read(buffer)) != -1) {
out.write(buffer, 0, cnt );
}
1、Java程序成功执行命令后,需要读取输出,然后将输出转移到文件中。
例如:
Process p = Runtime.getRuntime().exec("Your_Command");
InputStream i = p.getInputStream();
InputStreamReader isr = new InputStreamReader(i);
BufferedReader br = new BufferedReader(isr);
File f = new File("d:\\my.txt");
FileWriter fw = new FileWriter(f); // for appending use (f,true)
BufferedWriter bw = new BufferedWriter(fw);
while((br.readLine())!=null){
bw.write(br.readLine()); // You can also use append.
}
补充安迪的回答,我认为你必须阅读这篇文章:http ://www.javaworld.com/jw-12-2000/jw-1229-traps.html 。
对于需要在 Java 中处理外部进程的人来说,这一点非常重要。
我想保持简单,并且您使用的是 Windows,请尝试:
Process pr = rt.exec("cmd /c \"ping localhost > output.txt\"");