0

我想将字符串写入文本文件,每次都写入文件底部。然后,如果我在文本文件中搜索某个字符串并找到它,我想用另一行替换该行。

我在想这个:计算文本文件中的行并添加+1,然后将我要写入的字符串写入该索引。但是甚至可以写入文本文件中的某个行号吗?

以及如何将某一行更新为另一个字符串?

谢谢!

4

2 回答 2

4

你不想这样做:这是灾难的根源。如果在原始文件修改过程中,您没有写入它,原始文件将被损坏。

使用双重写入协议,将修改后的文件写入另一个文件,并且仅当写入成功时,将该文件重命名为原始文件。

如果您的文件不是太大,对于“大”的一些定义,我建议List<String>为目标文件创建一个:逐行读取原始文件,添加到该列表;一旦列表处理完成(您的问题不清楚到底应该发生什么),将每个文件写入String另一个文件,刷新并关闭,如果成功,则重命名为原始文件。

于 2013-01-01T11:42:13.927 回答
0
  1. 如果要附加字符串,FileOutputStream确实有一个替代构造函数,您可以将其设置为 true,以便您可以打开以进行附加。

  2. 例如,如果您想将字符串替换为文件而不复制它,那么最好的办法是改用RandomAccessFile 。但是,如果线路长度变化,这是不可靠的。对于固定长度的记录,这应该这样工作:

    • 移动到偏移量

您也可以“截断”(通过 setLength),因此如果您需要删除一个尾随块,您可以这样丢弃。

第三种解决方案是依赖 mmap。这需要整个文件的内存映射字节缓冲区。我没有考虑解决方案的全部可行性(它在纯 C 中工作),但如果你同时考虑 Java 平台 + 操作系统,那实际上“看起来”更正确

于 2013-01-01T11:29:45.620 回答