- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于我缺乏对文件系统行为的了解,我提前道歉。
我需要读取一个大的 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/
我是 stackoverflow 的新手,所以希望我正确设置了这个问题的格式!我已经通过网站(和谷歌)搜索了我的问题的答案,但一直无法找到这对我不起作用的原因。 我正在尝试从 XMLEventRead
所以这个问题与标题中所说的差不多。我正在做一些 xml 工作并使用 XMLEventWriter。我遇到的大问题是我需要创建一些自闭标签 问题是我还没有找到使用 eventWriter 执行此操作的方
由于我缺乏对文件系统行为的了解,我提前道歉。 我需要读取一个大的 XML 文件,修改它,然后将其写入同一个文件。 这是我设置 XMLEventReader 和 XMLEventWriter 的代码:
我正在使用“XMLEventWriter”在 Java 中生成 XML 文件。代码片段如下: XMLEventWriter writer = outputFactory.createXMLEventW
我正在尝试使用 StAX API 中的 XMLEventWriter 从头开始编写 XML 文档。 我不知道如何获取要发出的默认命名空间属性。 例如,默认命名空间 URI 字符串为“http://
我正在使用 JAXB 来生成 XML 文件,并且由于业务需要,我目前正在使用 XMLEventWriter 将其写入其他一些 XML 文件的中间: marshaller.marshal(jaxbEle
为了创建大型 XML 文件,我们决定使用 StAX API。基本结构是使用低级 API 构建的:createStartDocument()、createStartElement()。这按预期工作。 但
我没有在 javax.xml.stream.XMLEventWriter 或 javax.xml.stream.XMLOutputFactory 中看到一个选项来设置任何一个空元素被写入(而不是明确的
我是一名优秀的程序员,十分优秀!