我们正在验证 XML 文件,根据验证结果,我们必须将文件移动到不同的文件夹中。
当 XML 有效时,验证器会返回一个值,我们可以毫无问题地移动文件。当 XML 根据架构无效时,也会发生同样的事情。
但是,如果 XML 格式不正确,则验证器会抛出异常,并且当我们尝试移动文件时,它会失败。我们相信内存中的某个地方仍然有一个句柄来保存文件。我们尝试在移动文件之前放置 System.gc() 并对问题进行排序,但我们无法System.gc()
作为解决方案。
代码看起来像这样。我们有一个 File 对象,我们从中创建一个 StreamSource。然后将 StreamSource 传递给验证器。当 XML 格式不正确时,它会引发 SAXException。在异常处理中,我们使用 .renameTo() 方法来移动文件。
sc = new StreamSource(xmlFile);
validator.validate(sc);
在我们尝试的捕获中
validator.reset();
validator=null;
sc=null;
但仍然.renameTo()
无法移动文件。如果我们System.gc()
抓到,移动就会成功。
有人可以启发我如何在没有的情况下对其进行排序System.gc()?
我们使用 JAXP 和 saxon-9.1.0.8 作为解析器。
非常感谢