Заранее извиняюсь, поскольку мне не хватает знаний о поведении файловой системы.
Мне нужно прочитать большой файл 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();
}
Вроде нормально работает. Но я не знаю, должен ли я создавать новый файл, а затем копировать старый.
Меня беспокоит вопрос, можно ли безопасно читать и писать по одному и тому же пути таким образом. Тем более, что будет вставлено содержимое, а затем операции чтения необходимо продолжить, не видя вновь добавленные элементы.