我想使用 Java 更新文本文件的特定部分。我希望能够扫描文件并选择要更新的特定行,有点像在数据库中,例如给定文件:
ID Value
1 100
2 500
4 20
我想插入 3 并更新 4,例如
ID Value
1 100
2 500
3 80
4 1000
有没有办法实现这个(看似)简单的任务?我知道您可以附加到文件,但我对随机访问更感兴趣
我想使用 Java 更新文本文件的特定部分。我希望能够扫描文件并选择要更新的特定行,有点像在数据库中,例如给定文件:
ID Value
1 100
2 500
4 20
我想插入 3 并更新 4,例如
ID Value
1 100
2 500
3 80
4 1000
有没有办法实现这个(看似)简单的任务?我知道您可以附加到文件,但我对随机访问更感兴趣
将文件加载到内存中,更改您的值,然后重新写入文件
如果有一种方法可以在不加载文件的情况下插入文件,我还没有听说过。您必须先将其他数据移开。
除非您正在处理大文件,否则性能通常不是太大的问题
我知道您可以附加到文件,但我对随机访问更感兴趣
您正在尝试在文件中间插入和删除字节。你不能那样做。文件系统根本不(通常)支持这一点。您可以覆盖特定字节,但不能插入或删除它们。
如果您的记录是固定长度(以字节为单位),您可以使用随机访问更新特定记录,但看起来情况并非如此。
您可以将整个文件加载到内存中,也可以从原始文件中读取,将旧数据或新数据写入到新文件中,以每行为基础。
您可以使用 java 中的随机访问文件来执行此操作,您可以使用可用的方法放置当前的写入和读取位置。你可以在这里探索更多
正如前面的答案所说,使用流是不可能做到这一点的。您可以尝试使用属性,即可以在文本文件中保存和修改的键值对。例如,您可以使用以下命令向文件添加新属性
setProperty(String key, String value)
此方法添加一个新属性,或者如果已经存在,则使用选择的键修改属性的值。
显然,在文件末尾添加了新属性,但是缺少排序对于性能来说不是问题,因为对文件的访问是通过调用 Hashtable 方法 put 的 getProperty 方法进行的。
有关一些示例,请参见本教程:
http://docs.oracle.com/javase/tutorial/essential/environment/properties.html