2016-05-19 10 views
0

私はコマンドラインから入力を受け取り、に標準入力を送り、出力を標準出力に出力するプログラムを持っています。コマンドラインに入力されることになったコードは以下のように見えることを意図している:コマンドプロンプトで入出力ファイルを使用してJavaプログラムを実行する

java package.sub.Calc < input-file > output-file 

または

echo some inputs to the calculator | java  
package.sub.Calc 

をしかし、私はそれが正しく動作するように見えることはできません。目標は、それが中にプログラムにテキストファイルを渡すか、コマンドライン上で右そこにあなたの数学の問題を書くことができるようにすることで、パイプ。

プログラムは

java -cp . package.sub.Calc 

正しく実行され、その後持ちますユーザータイプを入力してEnterキーを押します。

ファイル名がinput.txtで、コマンドラインから呼び出して、コマンドラインに答えを表示したい場合(プログラムはSystem.out.printlnに設計されています)、どのようにこの情報を入力しますか?

私の現在のコードは、System.inScannerを実装しています。私はこれを動作させるために他の何かを使わなければならないでしょうか?コマンドプロンプトで何かを実行するのが初めてで、動作させることができないようです。

ご協力いただきまして誠にありがとうございます。

マイコード:

public static void main(String[] args) { 
    Calc calc = new Calc(); 
    Scanner sc = new Scanner(System.in); 
    StringBuilder sb = new StringBuilder(); 
    String input = ""; 
    List<String> strs = new ArrayList<>(); 
    ArrayList<String> tokens; 
    while (sc.hasNextLine()) { 
     String line = sc.nextLine().trim(); 
     if (line.isEmpty()) { 
      for (String s : strs) { 
       sb.append(s); 
       input = sb.toString(); 
      } 
      tokens = new ArrayList<>(Arrays.asList(input.split(" "))); 
      //call calculate and reset 
      calc.calculate(tokens); 
      strs.clear(); 
      tokens.clear(); 
      sb.setLength(0); 
      input = ""; 
     } else if (line.length() == 1) { 
      strs.add(" "); 
      strs.add(line); 
      strs.add(" "); 
     //manual user exit case 
     } else if (line.equals("EXIT")){ 
      System.exit(0); 
     }else { 
      strs.add(line); 
     } 
    } 
} 
+0

コマンドラインでファイル名を 'String'とし、その文字列をJavaで使用してファイルを開くのはどうでしょうか?この例を見てください。http://www.mkyong.com/java/how-to-read-file-from-java-bufferedreader-example/ – jmcg

+0

これまでのコードを提供してください。あなたが記述しているものはうまくいくはずです。問題があれば、あなたの実装にはおそらく存在します。 – Tim

+0

@Timが私の主な方法を追加しました。問題が自分のコードであるか、コマンドラインに何を入力したのかわからない。 input.txtにどのように渡すのですか? – Alkarin

答えて

1

になりますことを確認してくださいあなたの入力パラメータを受け取る配列です2つの問題があるようです。

1)プログラムを手動で実行するときに-cpコマンドラインオプションを使用しますが、入力から試して読み込むときは含めません。両方の場合に必要です。つまり、javaクラスファイルの場所を教えてください。

2)あなたは、あなたの入力を処理する方法は、あなたが渡している入力と一致していません。

あなたは空行(if(line.isEmpty()))を受信するときにのみcalculateを呼び出しますが、

echo some inputs to the calculator | java -cp . package.sub.Calc 
のようなもの

は空白行を生成しません。

あなたはどちらかを実行する必要があります。

printf "%s\n\n" "some inputs to the calculator" | java -cp . package.sub.Calc 

またはcalculate(おそらくwhileループの外にそれを呼び出すことによって)をトリガ条件を変更してください。

+0

1)それは私の問題と思われ、トリックをしました! – Alkarin

+0

2)あなたが提供したprintfコードを試しましたが、「内部または外部コマンドとして再指定されていません」 – Alkarin

+0

ああ、あなたがウィンドウズ上で動いているようです。その場合、 'printf'オプションは機能しませんが、あなたが送ったファイルに最後に空白行があることを確認して、結果を得ることができます。 – Tim

-1

あなたの入力はごmain方法で受信されます。 public static void main (String[] args)args配列は、あなたがjava -cp . <main_class_pat> <arg0> <arg1> ...

として、あなたのプログラムを実行している場合は、あなたのargs配列が...長さを希望しており、もしそうなら、あなたの入力ファイルがarg[0]

+2

Alkarinはコマンドライン引数からではなく、_stdin_( 'System.in')からの読み取りを望んでいます。 – Tim

関連する問題