Java - 覆盖文件的特定部分

时间:2012-11-15 15:22:58

标签: java file io random-access

我想使用Java更新文本文件的特定部分。我希望能够扫描文件并选择要更新的特定行,有点像数据库,例如给定文件:

ID Value
1  100
2  500
4  20

我想插入3并更新4,例如

ID Value
1  100
2  500
3  80
4  1000

有没有办法实现这个(貌似)简单的任务?我知道你可以追加到一个文件,但我对随机访问更感兴趣

4 个答案:

答案 0 :(得分:1)

将文件加载到内存中,更改值,然后重新写入文件

如果有一种方法可以在不加载的情况下插入文件,我还没有听说过。您必须先将其他数据移开。

除非你处理大文件,否则性能不是太大的问题

答案 1 :(得分:1)

  

我知道你可以追加到一个文件,但我对随机访问更感兴趣

您正尝试在文件中间插入和删除字节。你不能这样做。文件系统根本不支持(通常)。您可以覆盖特定字节,但不能插入或删除它们。

您可以使用随机访问更新特定记录,如果您的记录是固定长度(以字节为单位),但看起来并非如此。

您可以将整个文件加载到内存中,也可以从原始文件中读取,使用旧数据或新数据以每行为基础写入新文件。

答案 2 :(得分:1)

您可以使用java中的随机访问文件来执行此操作,您可以使用可用方法放置当前的写入和读取位置。您可以浏览更多here

答案 3 :(得分:0)

正如之前的回答所说,使用流不可能做到这一点。您可以尝试使用属性,这些属性是可以在文本文件中保存和修改的键值对。 例如,您可以使用命令

将新属性添加到文件中
setProperty(String key, String value)

此方法添加一个新属性,或者,如果已存在,则使用选择的键修改属性的值。

显然,在文件的末尾添加了新属性,但缺少排序对于性能来说不是问题,因为访问文件是使用调用Hashtable方法put的getProperty方法进行的。

有关示例,请参阅本教程:

http://docs.oracle.com/javase/tutorial/essential/environment/properties.html