6
public class ReadInput {
    public static void main(String[] args) throws IOException {
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        String x = null;  
        while( (x = input.readLine()) != null ) {    
            System.out.println(x); 
        }    
    }
}  

「java ReadInput < input.txt」と入力してコマンド ラインからこのコードを実行できますが、「java ReadInput hello」のように入力を直接入力することはできません。「java ReadInput hello」と入力すると、何らかの理由で無限ループに陥ったようです。「java ReadInput < input.txt」と入力するのと同じように機能するだけでなく、代わりに「hello」を再表示するだけではいけませんか?

4

4 に答える 4

7

プログラムのコマンド ラインで指定された引数は には渡されずSystem.inargs配列に渡されます。のようなものを使用echo hello | java ReadInputしてプログラムを実行するか、プログラムを変更してそのargs配列を調べて入力として扱うことができます。System.in(後者のオプションを使用する場合、に何もない場合は、からの読み取りにフォールバックすることをお勧めしますargs。)

于 2011-05-07T01:29:45.233 に答える
5

上記の他の 2 つの回答はどちらも、部分的に正しいですが、部分的に誤解を招く可能性があります。

次の構文を使用して...

java ReadInput < input.txt

...Java バイナリで実行される実際のコマンドは次のとおりです。

java ReadInput

オペレーティング システム シェルは記号を解釈し、<input.txt の内容を標準入力ストリーム (System.in) に送信します。

を呼び出すSystem.in.readLine()と、コードは標準入力ストリームから利用可能な入力行があるかどうかをチェックします。ファイルをパイプすると、ファイルの次の行が取得されます (OS がファイルの内容を取得し、プロンプトでそれらを入力したかのように)。ファイルをパイプせずにプログラムを実行すると、ユーザーがシェルから入力行を提供してリターンキーを押すまで待機します。

JVM へのコマンドライン引数は別の方法で動作し、標準入力ストリーム (System.in) を使用しません。元:

java ReadInput "Input number one" "Input number two"

この場合、2 つのコマンドライン引数を渡しています。これらのプロパティは、args配列を通じて利用できます。

   public static void main(String[] args) throws IOException {
          System.out.println(args.length); //3
          System.out.println(args[0]); //"ReadInput"
          System.out.println(args[1]); //"Input number one"
          System.out.println(args[2]); //"Input number two"
   }

あなたが提供したコードでは、readLine() 呼び出しの結果が返されたときにプログラムが終了しますnull。プロンプトでエンターを押して空白行を送信し、プログラムを終了できると思いますそうでない場合は、空の文字列をチェックするようにプログラムを修正する必要があります (input.readLine().equals(""))。

お役に立てれば。

于 2011-05-10T01:40:59.317 に答える
3

入力java ReadInput helloすると、(まだ)入力が提供されていないSystem.inため、何かを読み取るまでプログラムの実行がブロックされます。文字列がメソッドのパラメーターに"hello"渡されていることに気付くかもしれません。argsmain()

デバッガーを使用している場合 (これを強くお勧めします)、 の最初の行にブレークポイントを配置しますmain()。プログラムをそのまま実行するjava ReadInput helloargs[0]"hello".

デバッガーを使用していない場合は、使用できますSystem.out.println()(これは、初心者が頻繁にコードをデバッグする方法です)。次のコード行を の最初の行として追加しますmain()

if (args.length > 0) System.out.println(args[0]);
于 2011-05-07T01:26:47.087 に答える
1

標準入力を終了します

Ctrl-D  :  Linux/Unix 
Ctrl-Z (or F6) and "Enter" : Windows.

または自分自身を設定しspecial EOF symbolます。

于 2015-01-22T07:02:26.227 に答える