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,那就把删除代码 放到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);抛出的异常该如何手动去关闭流?
在catch到DocumentException异常时强行关闭文档,也就是关闭输出流!然后finally中继续删除文件!你试试吧!追问嗯,我很想关闭。刚补充了一下问题,贴出了简要的代码和文字,请问SAXReader sax = new SAXReader(); Document doc= sax.read(file);抛出的异常该如何手动去关闭流?
- 3楼网友:煞尾
- 2021-03-26 08:03
加个try{} catch
在catch到DocumentException异常时强行关闭文档追问强制关闭文档?大神求语句!
在catch到DocumentException异常时强行关闭文档追问强制关闭文档?大神求语句!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯