2012-06-28 49 views
1

我想执行一个带有2个参数的命令。输入文件名称 2.输出文件名称。runtime.exec()花费无限时间执行代码

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

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

当运行上述代码的I,它正在无限的时间。 是否有可能给<,>在cmd中。请charecters建议我....

+0

文本文件的大小是多少? – Lucifer

+0

*“......这是无限的时间”* - 你确定吗?你测过它了吗? :-) –

+0

文本文件的大小约为2kb。执行该行后程序挂起。我尝试打印并测试它。 –

回答

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 
0

有由迈克尔·C·Daconta一个梦幻般的blog post关于成功的命令行调用使用Java中运行。这并不像你想象的那么容易!

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