我想执行一个带有 2 个参数的命令。1.输入文件名 2.输出文件名。
命令为六V1.1 outputFile.txt 代码为:
String cmd= "sixV1.1 <inputFile.txt >outputFile.txt";
Process p=Runtime.getRuntime().exec(cmd);
int retValue=p.waitFor();
当我运行上面的代码时,它需要无限的时间。是否可以在 cmd 中给出 <, > 字符。请建议我....
我想执行一个带有 2 个参数的命令。1.输入文件名 2.输出文件名。
命令为六V1.1 outputFile.txt 代码为:
String cmd= "sixV1.1 <inputFile.txt >outputFile.txt";
Process p=Runtime.getRuntime().exec(cmd);
int retValue=p.waitFor();
当我运行上面的代码时,它需要无限的时间。是否可以在 cmd 中给出 <, > 字符。请建议我....
在 Java 中启动进程时进行输入/输出重定向的正确方法是从进程的流中写入/读取:
Process p = Runtime.getRuntime().exec("sixV1.1");
InputStream is = p.getInputStream();
// read from is and write to outputFile.txt
OutputStream os = p.getOutputStream();
// read from inputFile.txt and write to os
Michael C. Daconta 撰写了一篇精彩的博客文章,介绍了在 Java 中使用 Runtime 成功进行命令行调用。这并不像你想象的那么容易!
以下来自该博客文章的代码摘录描述了“MediocreExecJava”,这是一个使用 Runtime.exec() 成功运行程序并管理其输入和输出而不挂起的类。我以前用过它,它可以工作。我强烈建议阅读这篇文章以了解原因!
import java.util.*;
import java.io.*;
public class MediocreExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("</ERROR>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}