写入txt文件,但不覆盖

Posted

技术标签:

【中文标题】写入txt文件,但不覆盖【英文标题】:Write to txt file, but not overwrite 【发布时间】:2012-04-19 22:12:24 【问题描述】:

我遇到了一个小问题,看起来很简单(我个人认为是这样),但我找不到答案。但至少我不知道如何解决它。

当我点击保存按钮时,我将一些行写入 .txt 文件。 然后,当我输入其他内容并再次点击保存时,它会覆盖我的第一行。

但我希望它写在新的一行。此外,当我再次关闭并重新启动应用程序并再次点击保存时,它必须再次将文本保存在新行上。

所以基本上:我怎样才能将文本写入 .txt 文件,而不覆盖之前的行。 我可以写入文件,所以这不是问题,只是如何不覆盖。

这是我的代码的“小”部分:

   public void Data_save_contacts(View v) 

        Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);

        try 

                writer_contact = new BufferedWriter(new FileWriter(root + "/Save/Contacten.txt"));
                writer_contact.write("Perceel "+str_boer_teler_nummer+" = "+str_boer_teler);
                writer_contact.newLine();   

         catch (IOException e) 
            System.err.println(e);
        

请为我指明正确的方向。

已经谢谢了,Bigflow

【问题讨论】:

【参考方案1】:

你必须这样做

writer_contact = new BufferedWriter(new FileWriter(root + "/Save/Contacten.txt",true));

正如java文档中所说:

FileWriter

public FileWriter(File file,
              boolean append)
       throws IOException

Constructs a FileWriter object given a File object. If the second argument is true, then bytes will be written to the end of the file rather than the beginning.

Parameters:
file - a File object to write to
append - if true, then bytes will be written to the end of the file rather than the beginning 

【讨论】:

别担心!很高兴能帮上忙;)【参考方案2】:

尝试:

public FileWriter (File file, boolean append)

append 设置为true

【讨论】:

【参考方案3】:

好吧,这只是您的一小部分代码(我假设您将其分块以免泄露其他部分),我怀疑您正在打开文件根目录 + "/Save /Contacten.txt" 处于非附加模式。第一次调用它时,文件被创建并写入。随后您调用它,它会找到该文件,并重新创建(或删除内容)然后写入该文件。

尝试使用:

writer_contact = new BufferedWriter(new FileWriter(root + "/Save/Contacten.txt", true));

当然,当你第一次打开/创建文件时,你会希望它是 false (除非你总是想在文件已经存在的情况下追加)。

试一试。

【讨论】:

【参考方案4】:

你可以检查文件是否存在?

或者您也可以附加旧文件。

如果不退出则只创建一个新的。

【讨论】:

以上是关于写入txt文件,但不覆盖的主要内容,如果未能解决你的问题,请参考以下文章

Java读取txt文件和覆盖写入txt文件和追加写入txt

java如何写入txt文件

labview中字符串写入txt时怎么做到不覆盖?

matlab 数据批量写入txt 后面的覆盖了前面的 怎么解决啊,救急!

Linux命令之文件重定向2

Python文件IO