2

Linux の多くのコマンドは、stdin またはファイルへの引数として、2 つの方法のいずれかで入力を受け取ります。例

echo "標準入力からのテキスト" | lpr

lpr ファイル名.txt

echo "標準入力からのテキスト" | nl

nl ファイル名.txt

同じことが awk、sed、grep などにも当てはまります。Java で記述されたコマンド ライン アプリから同じ動作が発生する可能性はありますか? System.in は stdin を表していると思います。stdin の読み取りは難しくありません。ファイルからの読み取りは難しくありませんが、コマンド ラインで呼び出された方法に従ってアプリがどのように動作するのでしょうか?

4

4 に答える 4

0

メソッドのパラメーターを処理しますmain(String[] args)。引数が指定されている場合、args[0]空ではないため、ファイル名であると想定/検証できます。それ以外の場合は、標準入力を介して入力が提供されたと想定/検証します。

コード内:

 public static void main(String[] args) {
  if (args.length > 0) {
       String filename = args[0];
       ... // process the file
  }
  else { 
     Scanner sc = new Scanner(System.in);
     ... // process STDIN
   }
 }
于 2013-08-27T03:42:58.980 に答える
0

それはただのプログラミングです。例えば:

   public class Main {

       public void run(OutputStream out) {
           // Write output to 'out'
       }

       public static void main(String[] args) {
           if (args.length == 1) {
               try (FileOutputStream out = new FileOutputStream(args[0])) {
                   new Main().run(out);
               }
           } else {
               new Main().run(System.out);
           }
       }
    }

このバージョンは、最初の引数が出力ファイル名であると想定し、ファイル名が指定されていない場合は標準出力に書き込みます。標準入力に対して同じことを行うことができ、引数を別の方法で処理することができます。


注: パラメータを使用する代わりに、JVM の「変数」を変更するためにout使用できます。しかし、アプリケーション ロジックの再利用性が高まるため、私はこの方法を好みます。(クラスをより大きなアプリケーションに埋め込み/使用したい場合を考えてみてください...それは他の目的に使用されます。)System.setOut(...)System.outMainSystem.out

于 2013-08-27T03:43:26.673 に答える
0

典型的なUNIXプログラムが行うことを行うことができます...コマンドライン引数を確認してください(メソッドに渡されmain(String[] args)、適切な入力ファイルが指定されていない場合はSystem.in.

于 2013-08-27T03:44:39.620 に答える