在我的应用程序中,我正在检查xml文件中的值,比如说some.xml
并将文件移动到另一个目录,具体取决于此读取的结果。
当some.xml
格式错误时,SaxBuilder
会抛出JDOMException
,但不会释放该文件。当我在此之后尝试移动some.xml
时,我收到了some.xml
被其他进程使用的错误。
我的代码就是这个(删除了无关的详细信息):
private static String getName(Path fullPath) {
File f = fullPath.toFile();
SAXBuilder saxBuilder = new SAXBuilder();
Document doc = null;
String result = "";
try {
doc = saxBuilder.build(f);
result = doc.getRootElement().getChild("imageControl").getText();
} catch (JDOMException | IOException e) {
e.printStackTrace();
}
return result;
}
所以 - 在运行之后,在传入的malinformed xml上,Saxlinul仍在打开malinformed xml文件 - 不能在我的后续方法中移动它。
如何解决这个问题?
我现在唯一想到的就是制作xml的临时副本并在taht副本上进行上述阅读。但这远远不是最好的事情。
我在Java 1.7上使用JDOM 2.0.6
TIA。
// -----------------------------
编辑:
相应行中的以下修复没有成功:
try (InputStream is = new FileInputStream(f)){
doc = saxBuilder.build(f);
此方法中的问题肯定。当我发表评论时,它都在运行预期的方式。
// --------------------------------------------- -
EDIT-2
nope - 错字。
try (InputStream is = new FileInputStream(f)){
doc = saxBuilder.build(is);
的工作原理。
答案 0 :(得分:0)
SaxBuilder似乎没有关闭资源,所以请尝试使用build(InputStream)
或build(Reader)
方法,并在finally块中明确关闭stream / reader。
我同意@Jim Garrison的观点,即JDOM可能会在异常的情况下忘记关闭输入。