只打印出文本文件的最后一行,而不是java中的其余行

时间:2013-02-21 19:33:08

标签: java text-files

我正在尝试将文件打印到文本文件中。虽然我已设法使其工作,但它只打印出控制台上打印的最后一行。例如。我的控制台有大约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());
        }       
}
    }

先谢谢你。

3 个答案:

答案 0 :(得分:2)

您正在每个循环中重新创建和覆盖您的文件。在循环之前创建文件和BufferedWriter,并在循环结束后关闭它。

答案 1 :(得分:1)

您应该将这些行放在while循环的开头。

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

在while循环退出后关闭Writer

output.close();

语句output.write(line +"Total: "+count);也试图在另一行的末尾写入每一行,从而产生一个大的输出行。替换为:

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

这会导致每一行打印在一个新行上。

不确定是否符合预期,但在您的代码中output.write可能会多次执行同一行,具体取决于faults变量的长度。这将导致同一行被多次打印。

如果faults的长度为n,则write的{​​{1}}将被称为同一n的{​​{1}}次。

我认为你需要这个:

line

答案 2 :(得分: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();
      }
   }
}