由于我不了解文件系统行为,因此我向您致歉。
我需要读取一个大型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();
}
它似乎工作正常。但是,我不知道是否应该创建一个新文件,然后复制旧文件。
我担心的是,以这种方式读取和写入同一路径是否安全。特别是由于将插入内容,因此读取操作需要继续进行,而不会看到新添加的元素。
不安全 它似乎可以在微不足道的情况下工作,但很可能在生产负荷下以奇怪而壮观的方式爆炸。正确的解决方案是写入新的临时文件,然后在完成后将临时文件重命名为原始文件。(这也有助于防止部分写入的文件)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句