gpt4 book ai didi

java - XMLEventReader 和 XMLEventWriter 在同一个文件上?

转载 作者:行者123 更新时间:2023-12-02 01:09:09 25 4
gpt4 key购买 nike

由于我缺乏对文件系统行为的了解,我提前道歉。

我需要读取一个大的 XML 文件,修改它,然后将其写入同一个文件。

这是我设置 XMLEventReader 和 XMLEventWriter 的代码:

        XMLInputFactory xmlif = XMLInputFactory.newInstance();
InputStreamReader isr = new InputStreamReader(new FileInputStream(m_cPath.toString()),
StandardCharsets.UTF_8.name());
m_evtr = xmlif.createXMLEventReader(isr);

XMLOutputFactory xmlof = XMLOutputFactory.newInstance();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(m_cPath.toString()), StandardCharsets.UTF_8);
m_evtw = xmlof.createXMLEventWriter(osw);
m_evtf = XMLEventFactory.newInstance();

如果我有一个输入,例如:

   <root>
<entry>1</entry>
<insert />
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
</root>

如果我做下面这样的事情,会安全吗?

        try {
while(m_evtr.hasNext()) {
XMLEvent evt = m_evtr.nextEvent();
m_evtw.add(evt);

if( evt.isEndElement()) {
EndElement endElement = evt.asEndElement();
String localName = endElement.getName().getLocalPart();
if( localName.equals("insert") ) {
// create and write new entry elements following the insert element here
}
}
}
} finally {
isr.close();
osw.close();
m_evtr.close();
m_evtw.close();
}

看起来效果不错。但是,我不知道是否应该创建一个新文件,然后复制旧文件。

我担心的是,以这种方式读取和写入同一路径是否安全。特别是因为会有内容插入,然后读取操作需要继续,而看不到新添加的元素。

最佳答案

这不安全。它似乎在微不足道的情况下工作,但很可能在生产负载下以奇怪和壮观的方式爆炸。正确的解决方案是写入新的临时文件,然后在完成后将临时文件重命名为原始文件。 (这也有助于防止部分写入的文件)。

关于java - XMLEventReader 和 XMLEventWriter 在同一个文件上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59617765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com