runtime.exec()花费无限的时间来执行代码

时间:2012-06-28 05:06:57

标签: java

我想执行一个带2个参数的命令。 1.输入文件名 2.output文件名。

该命令是sixV1.1 outputFile.txt 代码是:

   String cmd= "sixV1.1 <inputFile.txt >outputFile.txt";
   Process p=Runtime.getRuntime().exec(cmd);
   int retValue=p.waitFor();

当我运行上面的代码时,它花费了无限的时间。 可以给&lt ;,&gt; cmd中的字符。请建议我......

2 个答案:

答案 0 :(得分:1)

在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

答案 1 :(得分:0)

Michael C. Daconta对使用Java中的Runtime成功执行命令行调用有一个很棒的blog post。这并不像你想象的那么容易!

该博客文章的以下代码摘录描述了“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();
          }
    }
}