清除后如何继续写入文件?

问题描述 投票:-1回答:1

我试着:

- 获取文件的内容(称为list.txt),修改它并提交到tempfile(listtemp.txt)。

-Clear list.txt,将listtemp.txt的新内容打印到list.txt中,然后清除listtemp.txt以进一步修改list.txt

问题是,当我在listtemp.txt中有适当的内容时,我无法获取新内容并将其放在list.txt中。我成功清除了列表,但后来我无法使用PrintWriter追加或写入列表。

我已经尝试使用FileWriter清除list.txt,将参数设置为false以清除它,然后关闭FileWriter,并使用我用来打印/直接附加到list.txt的原始PrintWriter。

我已经尝试完全删除list.txt,然后重新创建它,然后使用原始PrintWriter再次打印/追加,直接打印/追加文本文件。

如前所述,我修改了list.txt并将其成功放入listtemp.txt。然后我尝试创建一个swapListing()方法来清除list.txt并添加listtemp.txt的内容。

    private void swapListing() {


        FileWriter fw = null; //This is the temporary FileWriter to clear the text file
        try {
            fw = new FileWriter(main.file, false); //Main list is cleared.
            fw.close();
            fw = null;

        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            String temp = main.getReader().readFile(main.filetemp); //I got the contents of the String from my listtemp.txt, and I checked, and the String is successfully retrieved, so this isn't the problem.
            pwriter.print(temp); // This is where I feel like file SHOULD be appended
        } catch(Exception e) {
            e.printStackTrace();
        }

    }

我也尝试删除该文件,但该文件实际上并未删除,原始内容实际上仍然在文件中。

    private void clearFile() {
        if (main.file.exists()) {
            main.file.delete();
            try {
                main.file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try {
            String temp = main.getReader().readFile(main.filetemp);
            pwriter.print(temp);
        } catch(Exception e) {
            e.printStackTrace();
        }

    }

我不想使用删除文件方法,但此时我只想要一个至少可以使用的工作解决方案。

java printwriter
1个回答
0
投票

有一个“安全保存”的概念,甚至还有操作系统的特殊支持(至少在Windows上)。程序是:

  • 请勿触摸原始文件
  • 将所有数据保存到新的临时文件中
  • 删除原始文件
  • 将临时文件移动到原始位置

然后,操作系统将为您应用原始文件的时间戳。在同一磁盘上移动文件是一种非常快速的操作。必要的修改仅在文件系统结构中。文件内容保留在磁盘上的完全相同的位置。

您没有遵循此程序。对我来说,听起来过于复杂

  • 将部分数据保存到新的临时文件中
  • 清除/删除原始文件
  • 再次将整个文件读入内存
  • 将其写回原始文件
  • 将更多数据写入原始文件

您还没有说明如何以及何时创建pwriter。它是否使用BufferedWriter?什么时候关闭?它完全关闭了吗?如果没有,你flush()吗?如果是的话,何时?如果没有,那可能是问题的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.