有人知道在Java中读写文件(xml,json)的方法,其中 Java对象将能够以反应方式存储在文件中。
我现在使用
com.fasterxml.jackson.core.JsonGenerator
将对象写入json文件。
要读取我正在使用的文件
com.fasterxml.jackson.core.JsonParser
但是我无法同时读写文件。 我不想有很多打开/关闭文件描述符的操作。
这是用Java实现的方法吗?
我的业务情景:
我从一个大文件(然后是几个GB)中读取记录,并且需要在记录之间创建关系。 不幸的是,输入文件中的记录不会进行排序,并且当所有记录都处于完美顺序时,就无法写入排序文件。
我遍历输入文件并找到parent record
,并希望在创建记录之间的记录时将记录写入第二个文件。
第二步,我想写child record
,但是我需要遍历record relations file
(使用开放写描述符的读文件操作),并且需要为我的{{ 1}},并在我填写parent record
并在其中插入我现在使用的child record
示例结构时更新该父记录:
child structure
答案 0 :(得分:0)
对问题的描述不是很清楚,我们不知道为什么为什么以及要实现的目标。但我会尝试:
如果您尝试执行类似React.js的JavaScript那样的操作,则需要程序来监视文件是否已更改,并通过更新相应的对象来反应。但这不是很有效(也没有什么意义)-也许只在对象类中使用静态字段来维持实例之间的状态就可以了?如果这完全适用于您的情况...
答案 1 :(得分:0)
我将使用文件的修改时间(或json中的运行版本号/ UUID)完整地加载和保存文件。
对于多个文件,可能对同一文件的多次访问需要一个管理类。
Files
类可用于加载/保存。
Path path = Paths.get("...");
FileTime t = Files.getLastModified(path);
byte[] data = Files.readAllBytes(path);
FileTime tcheck = Files.getLastModified(path);
ByteArrayInputStream bais = ...
通过这种方式,访问尽可能地是原子/瞬时的。
理想情况下,您可以使用FileLock.lock()
,但对于随机访问文件来说更多,
文件通道,尤其是带有缓冲区的通道。例如,如果json文件确实很大。
但是,那么json格式本身就不够用。
答案 2 :(得分:0)
我认为针对我的案件的最佳解决方案是:
relations_file