gpt4 book ai didi

java - 是否可以更改 txt 文件中的一行而不读取和写入整个文件(Java)?

转载 作者:行者123 更新时间:2023-12-01 19:11:54 26 4
gpt4 key购买 nike

假设我有一个文本文件:

I love bananas.
<age> 23 </age> years old.
I like beaches.

我想做的就是打开所述文件并将年龄更改为 24 或 25。有什么方法可以在 Java 中做到这一点而不读取或写入整个文件?我知道缓冲读取器和写入器是可能的,但是当文件变得很大时,我正在寻找一种内存密集程度较低的方法。

最佳答案

简短回答:不。

长答案:并不真地。如果您知道要插入的文本直接替换要删除的文本,则可以通过查找文件的该部分、读取一个小块、替换新文本并替换该 block 来执行替换。这适用于您的年龄替换示例,但如果您将 9 替换为 10,或者将 99 替换为 100,则无效。

但是,还有其他困难:

您可能有可变长度的行,因此您不知道要寻找到哪里。即使您一次执行一个 block 并丢弃不需要的内容,您仍然必须读取文件直到进行替换的位置。

使用 UTF-8 等多字节字符集会更加复杂。您的传入文本可能显示与传出文本相同的长度,但可能会更短或更长,具体取决于替换。

e (U+0065) 编码为一个字节,但 é (U+00E9) 编码为两个字节。

但是,如果您只是在寻找一种内存占用较少的方法,您可以一次读取一行文件,然后在处理时将每一行写入一个新文件。完成后,删除旧文件并重命名新文件。这可能会很慢,因此缓冲读取和写入,例如 20 行(或 100 行,或 1000 行,或您选择的任何行......)将提高性能。

关于java - 是否可以更改 txt 文件中的一行而不读取和写入整个文件(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59472896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com