3

ファイルリダイレクトを使用して Java プログラムを実行しようとしています。私はこの簡単なプログラムでそれをテストしています:

package netbeans.sanbdox;

public class Sanbdox {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}

コマンドラインに移動して実行すると

$ java -jar dist/compiled_project.jar < q1.txt
$ 

q1.txt空のファイルではありませんが、出力はありません。ファイルのリダイレクトを機能させるにはどうすればよいですか?

4

2 に答える 2

8

その形式でリダイレクトすると、stdinそのファイルからのファイル ストリームに置き換えられます。コードは何にも使用しないためstdin、コマンドライン引数をプログラムに渡していないため、出力はありません。

期待しているものを確認するには、次を使用する必要がありますScanner

Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
    System.out.println(scanner.next());
}

scanner.close(); // Not required for stdin but good practice

ファイルの各トークンをコマンド ライン引数として指定することが本当に必要な場合は、シェルで次のように実行できます。

$ java -jar dist/compiled_project.jar $(cat q1.txt)

q1.txtこれにより、シェル コマンドの一部としての内容が出力されます。改行文字やその他の問題が原因で、思いどおりに機能しない可能性があります。

于 2013-10-31T03:26:48.433 に答える
4

System.in入力は、プログラムの開始時に main(String[] args) メソッドを介して渡されるデータとしてではなく、によってキャプチャされます。

入力からそのデータを読み取るには、System.inとして読み取るInputStreamか、 でラップしますReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

... s.readLine() 

System.in や Reader を閉じないようにしてください。そうしないと、プログラムへのキーボード入力も閉じてしまいます。

于 2013-10-31T03:32:49.990 に答える