我有一个大文件,我只需要删除其中的一些行 有没有办法在不打开新文件并复制整个文本的情况下执行此操作?
编辑: 主要问题是当它在多个带有大 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
replaceL2L3...LN
withL3...LN
或者您可以使用 RAF 按照 @halfbit 的回答一次“滑动”一行。
但是:
在最坏的情况下,您会复制整个文件内容,而平均情况则涉及读取和写入
O(N)
行的字节。执行此操作的简单方法需要在内存中保存
O(N)
行。“滑动”方法需要
O(N)
I/O 操作(即系统调用)。最重要的是:通过就地文件更新删除行是有风险的。如果应用程序在过程中被中断(例如电源故障),那么您最终会得到一个损坏的文件。
FWIW:这并不是 Java 本身的限制。相反,它是现代操作系统表示/模型文件方式的限制。
关于java - java从txt文件中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47900548/