如果文件很小并且您要替换的输入值是唯一的“足够”,并且您对快速和肮脏的态度持开放态度,请使用 apache commons-exec 或其他东西来解决:
bash$> echo '{
"id" : "20120421141411",
"name" : "Example",
"time_start" : "2012-04-21T14:14:14"
}' | sed -e 's/Example/othername/'
输出:
{
"id" : "20120421141411",
"name" : "othername",
"time_start" : "2012-04-21T14:14:14"
}
cat file | sed ...
如果您知道文件的路径,请使用。
如果您真的想就地编辑文件,只写入您想要更改的那些字节,那么只有当您正在写入的数据不会覆盖文件中的后续数据时才有可能。使用上述解决方案之一会更好。
假设 JSON 文件很大(>1GB?),那么这种技术有意义吗?不,你到底在用这么大的 JSON 文件做什么?分开吧!但为了辩论...
您真的很想这样做,因此您连接到 JSON 解析器以跟踪文件中的字节偏移量,并能够将其绑定回表示您将要操作的 JsonNode 的对象。此时您可能最终会编写自己的解析器;JSON 语法有意简单。然后你只需打开文件,跳到那个偏移量,然后写入 JsonNode 数据......除非它会覆盖它之后的东西(你是否在每个值之后用空间缓冲区预先填充文件,以防万一?嗯? ...这听起来像是一个数据库问题)。在这种情况下,您最终将重写文件的整个其余部分,因为较大的值会将其他所有内容“向下推”。如果编辑总是在文件末尾附近,这没什么大不了的。但如果它们是随机的,你的表现就注定了。您将成为序列化写入的瓶颈。