JDOM `SaxBuilder` 未发布格式错误的文件

JDOM `SaxBuilder` not releasing the malformed file

在我的应用程序中,我正在检查 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;
}

so - 在 运行 之后,在传入错误信息 xml 时,该错误信息 xml 文件仍由 SaxBulider 打开 - 无法在我的后续操作中移动它方法。

如何解决这个问题?

我现在唯一能想到的就是制作一份 xml 的临时副本,然后在副本上进行上述阅读。但这远不是最好的事情。

我在 Java 1.7

上使用 JDOM 2.0.6

TIA。

//----------------------------

编辑:

相应行中的以下修复没有成功:

    try (InputStream is = new FileInputStream(f)){
        doc = saxBuilder.build(f);

这个方法肯定有问题。当我注释掉它的调用时,这都是 运行 预期的方式。

//---------------------------------------- ----

编辑-2

不对 - 打字错误。

    try (InputStream is = new FileInputStream(f)){
        doc = saxBuilder.build(is);

有效。

SaxBuilder 似乎没有关闭资源,所以请尝试使用 build(InputStream)build(Reader) 方法,并在 finally 块中显式关闭 stream/reader。
我同意@Jim Garrison 的观点,JDOM 可能会在出现异常时忘记关闭输入。