首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在清除文件后继续写入该文件?

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

Stack Overflow用户
提问于 2019-04-12 03:35:46
回答 1查看 49关注 0票数 -1

我在试着:

-Take一个文件(称为list.txt)的内容,修改它并提交到一个临时文件(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的内容。

代码语言:javascript
复制
    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();
        }

    }

我也试过删除文件,但文件实际上并没有被删除,而且原始内容实际上也仍然在文件中。

代码语言:javascript
复制
    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();
        }

    }

我不希望使用delete file方法,但在这一点上,我只想要一个至少可以使用的有效解决方案。

EN

回答 1

Stack Overflow用户

发布于 2019-04-12 03:54:06

有一个“安全保存”的概念,它甚至得到了操作系统的特殊支持(至少在Windows上)。具体步骤如下:

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

>F29

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

您没有遵循此过程。对我来说,这听起来太复杂了

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

您尚未说明如何以及何时创建pwriter。它使用BufferedWriter吗?什么时候关门?它会被关闭吗?如果不是,你会flush()它吗?如果是,什么时候?如果不是,这可能是问题的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55639961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档