0

バイナリデータを ascii に変換するためにこのコードを書きました。コンソールの結果をテキストファイル output.txt に書きたいと思います。実行されますが、問題は、最初の行をコンソールに出力し、2 行目からテキストファイルへの出力の書き込みを開始することです。つまり、fisr 行をスキップします。

public static void main(String args[])
  {
  try{
  // Open the file that is the first 
  // command line parameter
  FileInputStream fstream = new FileInputStream("textfile.txt");
  // Get the object of DataInputStream
  DataInputStream in = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String strLine;
  //Read File Line By Line
  while ((strLine = br.readLine()) != null)   {

      String input = br.readLine();
            String output = "";
            for(int i = 0; i <= input.length() - 8; i+=8)
            {
                int k = Integer.parseInt(input.substring(i, i+8), 2);
                output += (char) k;
            }

                System.out.println("string: " + output);
          orgStream = System.out;
          fileStream = new PrintStream(new FileOutputStream("d:/output.txt",true));

          // Redirecting console output to file
          System.setOut(fileStream);


              } 
  //Close the input stream
  in.close();
    }catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }
  }
}

これらの行は、結果を output.txt に書き込む責任があります。

 System.out.println("string: " + output);
          orgStream = System.out;
          fileStream = new PrintStream(new FileOutputStream("d:/output.txt",true));

          // Redirecting console output to file
          System.setOut(fileStream);

出力をEclipseに保存して、再び使用できるようにするにはどうすればよいですか? 今はDドライブに保存

4

4 に答える 4

1

outストリームを使用しません。

于 2012-04-24T07:57:07.403 に答える
1

この行

PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);

System.out に書き込んだ内容を FileOutputStream にリダイレクトするだけです。System.out には何も書き込まないので、output.txt には何も書き込まれません。

System.out をリダイレクトする代わりに、作成した PrintStream に出力を書き込むことができます。そのため、最初に while ループの外側で PrintStream を作成し、次にループの内側で、作成した各文字を PrintStream に直接書き込みます。System.out をリダイレクトしたり、(非効率的に) 文字を文字列に連結したりする必要はありません。

また、書き終わったら、作成したストリームを close() する必要があります。これは、ストリームを開いたままにしておくとバグが発生する可能性がある、より大きなプログラムを書き始める前に学ぶべき良い習慣です。

于 2012-04-24T07:57:56.393 に答える
0

コード
System.err.println("Error: " + e.getMessage());は、アウトストリームではなくエラーストリームに書き込みます。

          System.setOut(out);

ここでは、出力ストリームを設定していますが、errストリームはデフォルトでコンソールに設定されています。

于 2012-04-24T07:54:49.390 に答える
0

私はあなたが必要だと思います

out.flush ();

最終的には。もう一度見てみると、あなたは何も書き出すことはありません。Ananthaが提案するように、エラーメッセージだけを書きたいですか?

あなたは忘れました:

System.out.println (output);
于 2012-04-24T07:55:00.933 に答える