我们正在验证 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 作为解析器。
非常感谢
尝试创建一个FileInputStream
并将其传递给StreamSource
然后关闭FileInputStream
当你完成时。通过传入一个File
您失去了如何/何时关闭文件句柄的控制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)