如何编辑文件中的特定属性?

时间:2012-04-09 09:00:18

标签: java file overwrite

所以说你有一个用XML或其他编码语言编写的文件。有可能只重写一行而不是将整个文件放入一个字符串,然后改变行,然后不得不将整个字符串重写回文件吗?

2 个答案:

答案 0 :(得分:2)

一般来说,没有。文件系统通常不支持在文件中间插入或修改数据的想法。

如果您的数据文件采用固定大小的记录格式,那么您可以编辑记录而不会覆盖文件的其余部分。对于类似XML的东西,理论上 可以通过插入与语义无关的空格来覆盖一个较短的值,但是你将无法编写更大的值。

在大多数情况下,重写整个文件更简单 - 如果可以的话,通过以流方式读取和写入(如果文件太大而无法一次读入内存),或者只是通过加载整个文件进入一些内存数据结构(例如XDocument),进行更改,然后再次保存文件。 (您可能需要考虑保存到不同的文件,然后移动文件以避免因为某些原因导致保存操作失败而丢失数据。)

如果所有这些都过于昂贵,您应该考虑使用多个文件(因此每个文件都较小)或数据库。

答案 1 :(得分:1)

如果要替换的行大于要替换它的新行,那么只要可以接受某种填充(例如空白字符和#39)就可以使用它。 ;')不会影响您的申请。

另一方面,如果新内容大于要替换的内容,则需要向下移动所有数据,因此您需要重写文件,或者至少从更换的行开始重写。

既然你提到了XML,那么你可能会以错误的方式接近你的问题。您需要的是替换特定的XML节点吗?在这种情况下,在将XML树写回文件之前,您可以考虑使用DOM将XML读入节点层次结构并在其中添加/更新/删除。