【问题标题】:How to delete line of a file with out writing to another file in Java如何在不写入Java中的另一个文件的情况下删除文件的行
【发布时间】:2013-09-07 08:56:13
【问题描述】:

我想在文本文件中找到一行并将其删除。 例如:

 aaa       aaa
 bbb   ->  ccc (bbb deleted)
 ccc

有一个例子可以做到这一点,但它写入新文件并重写。如何在不写入另一个文件的情况下做到这一点(也无需重写同一个文件,因为它包含大量数据)

【问题讨论】:

    标签: java file-io java-io


    【解决方案1】:

    我认为唯一的做法是编写一个新文件。

    如果您考虑文件系统,以及文件如何存储在硬盘上。大多数文件系统会将文件作为顺序块存储在硬盘上。如果你只是从文件中删除这些字节,那么文件中就会有一个空洞。您必须将删除的字节右侧的字节移到文件的左侧。无论哪种方式,文件系统都会限制您。

    相反,您可以尝试尽量减少编写新文件的次数。例如,如果您正在为大文件制作文字处理器,则可以改为保存包含用户所做编辑的文件,并在用户关闭文件后执行这些命令(并且只写入一次文件)。

    【讨论】:

      【解决方案2】:

      您是否尝试将文本文件内容获取到字符串数组变量?

      这是一个伪代码,我该怎么做;

      var your_text_content= txt file;
      var your_new_text_content = your_text_content.replace("line you are looking for",""); 
      txtfile = your_new_text_content;
      

      【讨论】:

      • 这里文件也在重写。我想删除文件的一行而不重写另一个文件或同一个文件。
      【解决方案3】:

      你不能。所有具有此功能的软件都将文件的内容复制到一个变量中并删除该行并将该行被删除的内容复制回来。

      所以你需要复制文件的内容。逐行阅读,直到到达该行并将其删除并再次保存内容。

      这就是记事本和其他编辑器的工作方式。这就是为什么大多数编辑器只接受最大 1 GB 的文件。因为处理大文件需要时间。

      希望这会有所帮助。

      我不会发布任何代码,因为您已经说过您找到了解决方案。

      【讨论】:

        猜你喜欢
        • 2016-12-10
        • 2014-12-23
        • 1970-01-01
        • 2014-07-06
        • 1970-01-01
        • 1970-01-01
        • 2015-07-07
        • 2021-08-23
        • 2013-07-12
        相关资源
        最近更新 更多