验证失败后移动文件(Java)

L4z*_*l0w 3 java io saxon jaxp

我们正在验证XML文件,根据验证结果,我们必须将文件移动到不同的文件夹中.

当XML有效时,验证器返回一个值,我们可以毫无问题地移动文件.当XML根据模式无效时,也会发生同样的事情.

但是,如果XML格式不正确,验证器会抛出异常,当我们尝试移动文件时,它会失败.我们相信在某个地方仍然有一个句柄可以保存文件.我们尝试在移动文件之前放入System.gc()并对问题进行排序,但我们不能System.gc()作为解决方案.

代码看起来像这样.我们有一个File对象,我们从中创建一个StreamSource.然后将StreamSource传递给验证器.当XML格式不正确时,它会抛出SAXException.在异常处理中,我们使用.renameTo()方法来移动文件.

sc = new StreamSource(xmlFile);
validator.validate(sc);
Run Code Online (Sandbox Code Playgroud)

我们尝试过捕获

validator.reset();
validator=null;
sc=null;
Run Code Online (Sandbox Code Playgroud)

但仍然.renameTo()无法移动文件.如果我们放入System.gc()捕获量,那么此举将会成功.

有人可以告诉我如何排除这个 System.gc()?

我们使用JAXP和saxon-9.1.0.8作为解析器.

非常感谢

Mik*_*e Q 5

尝试创建FileInputStream并传递,StreamSource然后FileInputStream在完成时关闭.通过传入File你已经失去了如何/何时关闭文件句柄的控制权.