1

ファイルをテキストファイルに出力しようとしています。私はそれを機能させることができましたが、コンソールに表示される最後の行しか出力しません。たとえば、私のコンソールには約 8000 行ありますが、テキスト ファイルの最後の行しか出力されず、すべての行をテキスト ファイルに出力したいと考えています。これはコードです:

       try {
        BufferedReader reader = new BufferedReader(new FileReader("JDT.txt"));
        Writer output = null;
        File file = new File("output.txt");
        output = new BufferedWriter(new FileWriter(file));


        String line = reader.readLine();
        int count=0;
        while(line !=null)
        {
            for(int i = 0 ; i<faults.length;i++){
                if(line.contains(faults[i]))
                    System.out.println(line);
                count++; 
                output.write(line +"Total: "+count);
                //System.out.println("File Written");
        }
            line=reader.readLine();
            }                  
        System.out.println("Printed Lines =" +count); 
                   output.close();     
        }
    catch (Exception ex) {
        System.out.println(ex.getMessage());
        }       
}
    }

よろしくお願いします。

4

3 に答える 3

2

各ループでファイルを再作成して上書きしています。ファイルとループのBufferedWriter前に作成し、ループが終了したら閉じます。

于 2013-02-21T19:37:12.580 に答える
1

参考までに載せておこうと思いました。これは、入力ファイルから出力ファイルに行をコピーするための一般的な方法です。

final class Sample
{
   private static final String inputFile = "input_file.txt";
   private static final String outputFile = "output_file.txt";

   public void start()
   {

      BufferedReader bufferedReader;
      BufferedWriter bufferedWriter;
      try
      {
         bufferedReader = new BufferedReader(new FileReader(inputFile));
         bufferedWriter = new BufferedWriter(new FileWriter(outputFile));
         copyContents(bufferedReader, bufferedWriter);
         bufferedReader.close();
         bufferedWriter.close();
      }
      catch (final IOException e)
      {
         e.printStackTrace();
      }
   }

   private void copyContents(final BufferedReader bufferedReader, final BufferedWriter bufferedWriter)
   {
      try
      {
         String line = bufferedReader.readLine();
         while (null != line)
         {
            bufferedWriter.write(line + '\n');
            line = bufferedReader.readLine();
         }
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }
   }
}
于 2013-02-21T20:00:41.687 に答える
1

これらの行は、whileループの開始前に配置する必要があります。

Writer output = null;
File file = new File("output.txt");
output = new BufferedWriter(new FileWriter(file));

Writerwhile ループの終了後を閉じます。

output.close();

また、ステートメントoutput.write(line +"Total: "+count);はすべての行を別の行の最後に書き込もうとしているため、1 行の大きな出力になります。それを次のように置き換えます。

output.write(line + "Total: " + count + "\n");

これにより、各行が新しい行に印刷されます。

output.write期待どおりかどうかはわかりませんが、変数の長さによっては、同じ行に対してコードが複数回実行される可能性がありますfaults。これにより、同じ行が複数回印刷されます。

の長さが である場合、faultsn同じに対して何度writeも呼び出されます。nline

これが必要だと思います:

while (line != null) {
    for (int i = 0; i < faults.length; i++) {
        if (line.contains(faults[i])) {
            count++;
            output.write(line + "Total: " + count + "\n");
            System.out.println(line);
            break;
        }
    }
    // System.out.println("File Written");
    line = reader.readLine();
}
于 2013-02-21T19:41:07.407 に答える