2

2つの引数を取るコマンドを実行したい。1.入力ファイル名2.出力ファイル名。

コマンドはsixV1.1outputFile.txtです。コードは次のとおりです。

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

上記のコードを実行すると、無限の時間がかかります。cmdで<、>文字を指定することは可能ですか。提案してください...。

4

2 に答える 2

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
于 2012-06-28T05:16:57.340 に答える
0

Java でのランタイムを使用したコマンド ライン呼び出しの成功について、Michael C. Daconta によるすばらしいブログ投稿があります。あなたが思うほど簡単ではありません!

そのブログ投稿から抜粋した次のコードは、「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();
          }
    }
}
于 2012-06-28T05:28:07.943 に答える