循环中的缓冲编写器正在 txt 文件中创建空行

Buffered writer in a loop is creating empty lines in txt file

Link 到整个代码:http://pastebin.com/Y0FA7zuG

我的代码:

public void dadUpdateFunction(ArrayList<JTextArea> texts)
{
  try{
    //Specify the file name and path here
    File file =new File("C:\Users\Karan\Documents\dadTXT.txt");

    /* This logic is to create the file if the
     * file is not already present
     */
    if(!file.exists()){
      file.createNewFile();
    }

    //Here true is to append the content to file
    FileWriter fw = new FileWriter(file,true);

    //BufferedWriter writer give better performance
    BufferedWriter bw = new BufferedWriter(fw);
    String content = "Karan";
    int i= 0;

    for(i= 0; i<texts.size(); i++)
    {
      content = (texts.get(i).getText() );
      if(i!=0) 
        bw.newLine();

      if(i>0)   
        texts.get(i-1).setEditable(false);
    }

    bw.write(content + "\n");
    //Closing BufferedWriter Stream
    bw.close();

    System.out.println("Data successfully appended at the end of file");

  }catch(IOException ioe){
     System.out.println("Exception occurred:");
  }
}

所以我有一个 JTextArea 数组列表。在我的程序中,用户可以在 JTextArea 中写入,然后单击此更新按钮,然后将在最新的 JTextArea 框中写入的文本添加到 txt 文件中。然而,我在我的 txt 文件中得到的输出是这样输出的:http://pastebin.com/fijFQKZi

我不想要数字之间的空行,因为这会弄乱我稍后缓冲的 reader。为什么要添加这些空行?

我该如何解决这个问题?我是新来的,所以如果我没有正确地写一些东西,请告诉我。 T

谢谢!

这让我在很多方面感到困惑。在你的循环中,你不断地给 content 一个新值而不做任何事情直到循环结束。同时,除了第一次之外,您将换行符写入缓冲区(这部分是有道理的)。我认为您需要在循环内移动 bw.write(content) 并在循环后将其删除。

for(i=0; i<texts.size(); i++)
{
    if(i!=0) {
        bw.newLine();
    }
    bw.write(texts.get(i).getText());
    if(i>0) {    
        texts.get(i-1).setEditable(false);
    }
}
bw.close();

如果您只想要最后的 JTextArea 内容而不需要其他 newLine,则必须删除

if(i!=0) 
    bw.newLine();

即为每个 JTextArea 添加一个新行。

现在,如果这确实是您想要的,您可以像这样重构:

content = texts.get(texts.size()-1).getText(); // get only the last one
bw.write(content + "\n"); // write last content
for(int i= 0; i<texts.size(); i++)
{
    texts.get(i).setEditable(false);
}