要使用XMLStreamReader我正在初始化它像 -
XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader reader = f.createXMLStreamReader(new FileReader(
"somefile.xml"));
Run Code Online (Sandbox Code Playgroud)
迭代它像 -
if (reader.hasNext()) {
reader.next();
// do something with xml data
}
Run Code Online (Sandbox Code Playgroud)
最后关闭它像 -
reader.close();
Run Code Online (Sandbox Code Playgroud)
这看起来是正常的流程,但我看到一些奇怪的行为.即使在关闭阅读器之后,OS也不允许我删除/移动xml文件,除非我退出java程序.在Win2k8服务器上运行时,我收到错误消息,说java.exe正在使用此xml文件.
所以我有几个问题 -
看看XMLStreamReader的close()文档,我得到以下内容 - "释放与此Reader相关的任何资源.此方法不会关闭底层输入源."
"底层输入源"是什么意思?为什么不被读者关闭()?
jab*_*bal 10
文档中提到的基础输入源正是您应该关闭的内容.将FileReader放入局部变量以便能够关闭它:
XMLInputFactory f = XMLInputFactory.newInstance();
FileReader fr = new FileReader("somefile.xml");
XMLStreamReader reader = f.createXMLStreamReader(fr);
// process xml
reader.close();
fr.close();
//suggest using apache commons IOUtils.closeQuietly(fr); this way you
// don't have to deal with exceptions if you don't want
Run Code Online (Sandbox Code Playgroud)