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

时间:2016-10-05 15:17:51

标签: java xml jdom

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

的工作原理。

1 个答案:

答案 0 :(得分:0)

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