java - java从txt文件中删除一行

标签 java string

我有一个大文件,我只需要删除其中的一些行 有没有办法在不打开新文件并复制整个文本的情况下执行此操作?

编辑: 主要问题是当它在多个带有大 txt 的线程中运行时,程序会失败

最佳答案

Is there any way to do this without opening a new file and copy the whole text?

不,没有。当然,如果您想安全地进行操作,则没有。

并且 RandomAccessFile 也不会真正帮助您。它允许您用相同数量的字节替换文件中的字节序列,但这并不等于删除一行。

你可以像这样使用 RAF:

Given an initial state L1L2L3...LN replace L2L3...LN with L3...LN

或者您可以使用 RAF 按照 @halfbit 的回答一次“滑动”一行。

但是:

  • 在最坏的情况下,您会复制整个文件内容,而平均情况则涉及读取和写入 O(N) 行的字节。

  • 执行此操作的简单方法需要在内存中保存 O(N) 行。

  • “滑动”方法需要 O(N) I/O 操作(即系统调用)。

  • 最重要的是:通过就地文件更新删除行是有风险的。如果应用程序在过程中被中断(例如电源故障),那么您最终会得到一个损坏的文件。

FWIW:这并不是 Java 本身的限制。相反,它是现代操作系统表示/模型文件方式的限制。

关于java - java从txt文件中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47900548/

相关文章:

java - 如何将 List 包装为 Jackson 生成的 JSON 中的顶级元素

java - InternetExplorerDriver 实例化时出现奇怪的错误

c - qsort 一个字符串数组,比较

javascript - 在node js express中将字符串解析为json

string - 数据.文本与字符串

java - 如何正确中断android中的线程

java - 如何提取 XPath 指向的所有值?

java - CamelContext.start() 不会阻塞

ruby - 在不使用 BigDecimal 的情况下将美分转换为 Ruby 中的美元字符串

c# - 将 int 与该字符串分开的最有效方法是什么?