永发信息网

java解析xml文件一旦异常,则无法删除该xml文件,该怎样操作

答案:4  悬赏:70  手机版
解决时间 2021-03-26 15:03
  • 提问者网友:寂寞撕碎了回忆
  • 2021-03-26 07:25
java解析xml文件一旦异常,则无法删除该xml文件,该怎样操作
最佳答案
  • 五星知识达人网友:鱼忧
  • 2021-03-26 07:31
如果你需要不管解析成功与否,都删除文件的话,可以考虑把删除动作放到异常处理的finally块中。追问但是解析失败了,我无法删除呀?删除我是必然会操作,但是我想知道的是对于解析失败的文件,如何去关闭其异常操作,再删除(好似你的文件被其他程序占用了,现在你想删除它,会提示你删除失败)。1楼答道点子上了,可是我不知道如何去强制关闭文档。追答你要先确认,无法删除文件的原因:
 产生异常,导致流程跳过了删除代码因而无法删除文件
文件被占用,执行删除代码却无法删除文件。
 
如果是1,那就把删除代码 放到try-catch-finally的finally块中,以保证执行删除语句。
如果是2,那就可能有很多原因,比如释放资源,断开连接之类的
追问是第2种。我把问题用代码和文字都补充了,大神看看有何高见?追答确定是第二种,那就说明异常时资源被占用

你可以使用FileInputStream,然后在finally中,首先关闭文件输入流,然后再删除文件,就应该ok了。

代码结构如下,新增部分我加了注释,

FileInputStream fis = new FileInputStream(new File("....."));

try{
SAXReader sax = new SAXReader();
Document doc= sax.read(fis); // 这里使用 文件输入流
} catch (DocumentException e) {

}finally{
try {
fis.close(); // 这里关闭文件输入流
} catch (IOException e) {
e.printStackTrace();
}

if(file.delete()){
System.out.println("文件已被删除!");
}else{
System.out.println("文件删除失败!");
}
}追问上午忙。刚按照大神的做法测试了下,可行!灰常感谢!昨天我自己想了想,用的是另外一种方法,也解决了这个问题,大神觉得这样有问题么?我在catch里,加入System.gc();然后就没问题了。追答不推荐使用垃圾回收机制
gc只是通知做垃圾回收,具体的回收时刻甚至是否确定会回收——都是不确定的,这样会影响程序的稳定性。
全部回答
  • 1楼网友:不如潦草
  • 2021-03-26 09:39
try{}catch(){}finally{} finally的代码是必须执行的 catch是遇到异常以后执行的 try是正常代码 catch() ()中写异常 ex 如 catch(Exception e)
  • 2楼网友:酒醒三更
  • 2021-03-26 09:03
加个try{} catch
在catch到DocumentException异常时强行关闭文档,也就是关闭输出流!然后finally中继续删除文件!你试试吧!追问嗯,我很想关闭。刚补充了一下问题,贴出了简要的代码和文字,请问SAXReader sax = new SAXReader(); Document doc= sax.read(file);抛出的异常该如何手动去关闭流?
  • 3楼网友:煞尾
  • 2021-03-26 08:03
加个try{} catch
在catch到DocumentException异常时强行关闭文档追问强制关闭文档?大神求语句!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯