如何覆盖现有的 .txt 文件

Posted

技术标签:

【中文标题】如何覆盖现有的 .txt 文件【英文标题】:How to overwrite an existing .txt file 【发布时间】:2015-01-03 07:18:34 【问题描述】:

我有一个创建 .txt 文件的应用程序。我想覆盖它。这是我的功能:

try
    String test = "Test string !";
    File file = new File("src\\homeautomation\\data\\RoomData.txt");

    // if file doesnt exists, then create it
    if (!file.exists()) 
        file.createNewFile();
    else

    

    FileWriter fw = new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(test);
    bw.close();

    System.out.println("Done");
catch(IOException e)
    e.printStackTrace();

如果文件存在的话,else子句中应该放什么,这样才能覆盖?

【问题讨论】:

Overwriting txt file in java的可能重复 【参考方案1】:

你不需要做任何事情,默认行为是覆盖。

不知道为什么我被否决了,说真的……这段代码总是会覆盖文件

try
        String test = "Test string !";
        File file = new File("output.txt");

        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(test);
        bw.close();

        System.out.println("Done");
    catch(IOException e)
        e.printStackTrace();
    

【讨论】:

【参考方案2】:

你不需要在 else 子句中做任何特别的事情。您实际上可以使用Writer 以两种不同的模式打开文件:

默认模式,覆盖整个文件 追加模式(在构造函数中由设置为true 的布尔值指定)将新数据追加到现有数据中

【讨论】:

“你不需要在 else 子句中做任何特别的事情”...实际上你的意思是,他也不应该有 if 子句。只是想自己提出一些聪明的评论:) 我认为createNewFile 会创建文件的所有不存在的父目录,但在查看文档后,它没有(File.mkdirs() 这样做)。所以是的,这里不需要 if 子句【参考方案3】:
FileWriter(String fileName, boolean append)

在给定文件名的情况下构造一个 FileWriter 对象,该对象带有一个布尔值,指示是否附加写入的数据。

下面的一行代码将帮助我们使文件为空。

FileUtils.write(new File("/your/file/path"), "")

下面的代码将帮助我们删除文件。

try

            File file = new File("src\\homeautomation\\data\\RoomData.txt");

            if(file.delete())
                System.out.println(file.getName() + " is deleted!");
            else
                System.out.println("Delete operation is failed.");
            

        catch(Exception e)

            e.printStackTrace();

        

【讨论】:

【参考方案4】:

只需在 else 块中调用 file.delete()。如果这是你想要的,那应该删除文件。

【讨论】:

他不想删除文件,他想覆盖它。他说删除是因为他不知道Writer 是如何工作的,并且认为他需要删除文件以覆盖它 他可以删除它,然后在它不存在的情况下执行相同的操作。这就是为什么我说“如果那是你想要的”,我不太确定他想要什么。 那为什么还要删除它,因为他不这样做会得到相同的结果? @Dici 对,这确实很聪明。我不会想出来的。

以上是关于如何覆盖现有的 .txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 If Not File.Exists 覆盖现有的 XML 文件

如何将更改保存到现有的 excel 文件,而不是创建包含更改的 txt 文件?

如何在没有消息的情况下保存/覆盖现有的 Excel 文件

如何利用c++ 把数据加入到txt文件的末尾而不覆盖文件中已有的数据

Java 覆盖现有的输出文件

使用 Python 的 tarfile 时覆盖现有的只读文件