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

仅打印文本文件的最后一行,而不是java中的其余行,java,text-files,Java,Text Files,我正在尝试将文件打印到文本文件。虽然我已经设法使它工作,但它只打印出控制台上打印的最后一行。例如,我的控制台大约有8000行,但它只打印文本文件中的最后一行,我想将所有行打印到文本文件中。 代码如下: try { BufferedReader reader = new BufferedReader(new FileReader("JDT.txt")); Writer output = null; File file = new Fil

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

提前谢谢你

您正在每个循环中重新创建和覆盖文件。在循环之前创建文件和BufferedWriter,并在循环完成后将其关闭。

您正在每个循环中重新创建和覆盖文件。在循环之前创建文件和BufferedWriter,并在循环完成后将其关闭。

应将这些行放在while循环开始之前

并在循环退出后关闭写入程序

output.close();
还有语句output.writeline+Total:+count;正在尝试将每一行写入另一行的末尾,从而产生一个大的输出行。替换为:

output.write(line + "Total: " + count + "\n");
这将导致每一行都打印在新的一行上

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

如果故障长度为n,则同一行的写操作将被调用n次

我想你需要这个:

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();
}

您应该将这些行放在while循环的开始之前

并在循环退出后关闭写入程序

output.close();
还有语句output.writeline+Total:+count;正在尝试将每一行写入另一行的末尾,从而产生一个大的输出行。替换为:

output.write(line + "Total: " + count + "\n");
这将导致每一行都打印在新的一行上

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

如果故障长度为n,则同一行的写操作将被调用n次

我想你需要这个:

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();
}

我想我应该把这个放在这里作为参考。这只是将行从输入文件复制到输出文件的一般方法

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();
      }
   }
}

我想我应该把这个放在这里作为参考。这只是将行从输入文件复制到输出文件的一般方法

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();
      }
   }
}


请格式化你的代码。为什么你要在每一行之后重新打开文件?长答案很短-你正在阅读的每一行上创建一个新的文件output.txt。我将Writer output=null;File File=new Fileoutput.txt;输出=新的BufferedWriterNewFileWriterFile;在缓冲读取器之后。我仍然有同样的问题。发布新编辑的代码请格式化您的代码。为什么在每行之后重新打开该文件?长答案非常短-您正在读取的每一行上创建一个新文件output.txt。我将Writer output=null;File File=new Fileoutput.txt;输出=新的BufferedWriterNewFileWriterFile;在缓冲读取器之后。我仍然有同样的问题。发布新编辑的代码是的,我更改了它。我仍然有相同的结果。在循环完成后调用close。它可以工作,但所有句子都在一行中,是否有任何方法可以将句子打印成新行?在BufferedWriter上调用newLine以在需要时开始新行。是的,我更改了它。我仍然有相同的结果。在循环完成后调用close。它可以工作,但所有句子都在一行中,是否有任何方法可以将句子打印成新行?在BufferedWriter上调用newLine以在需要时开始新行。我这样做了,它仍然只在文本文件中打印一行。output.close;仍然在循环中。它可以工作,但是所有的句子都在一行中,有什么方法可以将句子打印成新的行吗?它现在打印成新的行,但是它将同一个句子打印了20次。错误是一个数组,它从文本文件中查找关键字,然后打印出文本文件。有什么方法可以改变这个吗?我有,它仍然只在文本文件中打印一行。output.close;仍然在循环中。它可以工作,但是所有的句子都在一行中,有什么方法可以将句子打印成新的行吗?它现在打印成新的行,但是它将同一个句子打印了20次。错误是一个数组,它从文本文件中查找关键字,然后打印出文本文件。我有办法改变这个吗?