解决file.delete()无法删除部分文件的问题
写了一个3个文件读取并写入到一个文件的程序,但再将写入完成后的这三个文件删除的时候却出现了第一个无法删除,第二和第三个可以删除的问题,找了半天也没有找到,我的代码如下:
读取并写入的方法:
try {if(!resultFile.exists()){for (String file : fpaths) { //(将要读取的文件放入到集合中了,所以重新遍历)filename=new File(file);br=new BufferedReader(new InputStreamReader(new FileInputStream(filename)));pw=new PrintWriter(new OutputStreamWriter(new FileOutputStream(resultFile,true)));//听了大神的建议后打印这两个流的内存地址log.info("br:"+br+" pw:"+pw);String line=null;while((line=br.readLine())!=null){if(line.indexOf(",")!=-1){pw.write(line);//写入数据pw.write("\r\n");//换行totalnum++;}}pw.flush();//最后刷新到文件中pw.write((""+totalnum));pw.flush();//把行数最后刷新到文件最后一行}}} catch (FileNotFoundException e) {e.printStackTrace();return false;} catch (IOException e) {e.printStackTrace();return false;}finally{try {if(br!=null){br.close();}if(pw!=null){pw.close();}//听了大神的建议后打印这两个流的内存地址log.info("finally br:"+br+" pw:"+pw);} catch (Exception e2) {e2.printStackTrace();}}
通过大神的指点,知道了原因,关闭流的操作放在for循环外的写法只关闭了最后一次for循环的br和pw流,打印一下流的内存地址:
br:java.io.BufferedReader@1960f05 pw:java.io.PrintWriter@b42cbf
br:java.io.BufferedReader@76cbf7 pw:java.io.PrintWriter@148cc8c
br:java.io.BufferedReader@6d084b pw:java.io.PrintWriter@3bb2b8
finally br:java.io.BufferedReader@6d084b pw:java.io.PrintWriter@3bb2b8
只打印出了最后一次循环的流
删除文件的方法:
public static boolean deleteFile(List<String> UngzFileList){boolean flag=false;for (String deletefile : UngzFileList) {File file=new File(deletefile);if(file.exists()){file.delete();if(!file.exists()){log.info("----------"+file+" had deleted");flag=true;}}else{log.info("----------"+file+"didn't exist ,can't deleted");flag=false;}}return flag;}
通过查找此类错误,网上说要关闭流,可是我的流是关闭的,通过调试模式查看,第一个文件再被写入完成和写入过程中都无法删除,手动删除时一直被JVM占用,当程序停止后,手动可以删除,就是说明还是被程序占用导致无法删除,而第二和第三个文件在写入完成后却可以删除,我目前还不知道为什么。(??如果有码友知道什么原因,欢迎骚然留言哦!?? 后面问了大神,知道了原因?)
后面通过修改写入文件的代码后可以删除文件了
修改写入的代码如下:
if(!resultFile.exists()){for (String file : fpaths) {try {filename=new File(file);br=new BufferedReader(new InputStreamReader(new FileInputStream(filename)));pw=new PrintWriter(new OutputStreamWriter(new FileOutputStream(resultFile,true)));//听了大神的建议后打印这两个流的内存地址log.info("br:"+br+" pw:"+pw);String line=null;while((line=br.readLine())!=null){if(line.indexOf(",")!=-1){pw.write(line);//写入数据pw.write("\r\n");//换行totalnum++;}}pw.flush();//最后刷新到文件中pw.write((""+totalnum));pw.flush();//把行数最后刷新到文件最后一行} catch (FileNotFoundException e) {e.printStackTrace();return false;} catch (IOException e) {e.printStackTrace();return false;}finally{try {if(br!=null){br.close();}if(pw!=null){pw.close();}//听了大神的建议后打印这两个流的内存地址log.info("finally br:"+br+" pw:"+pw);} catch (Exception e2) {e2.printStackTrace();}}}}
写入的时候由读取三个文件并且三个文件全部写入完成后才关闭流改为每读取一个文件并写入文件后就关闭流,一共关闭三次流。再次尝试就可以删除了。
这种方法打印出来的内存地址:
br:java.io.BufferedReader@29428e pw:java.io.PrintWriter@d0a5d9finally br:java.io.BufferedReader@29428e pw:java.io.PrintWriter@d0a5d9br:java.io.BufferedReader@388993 pw:java.io.PrintWriter@1d04653finally br:java.io.BufferedReader@388993 pw:java.io.PrintWriter@1d04653br:java.io.BufferedReader@b8f82d pw:java.io.PrintWriter@1ad77a7finally br:java.io.BufferedReader@b8f82d pw:java.io.PrintWriter@1ad77a7
每读取写入完后流都被关闭了,所以文件可以被删除。
解决file.delete()无法删除部分文件的问题相关推荐
- file.delete无法删除文件解决
file.delete()无法删除文件的问题排查思路 一般遇到这种问题,需要思考,没有删除的文件是什么原因造成的,常见的有: 1. 第一种是不是你本地打开该文件,导致系统占用该文件,这种先自查. 2. ...
- 解决file.delete老是失败的问题,批量删除文件夹下的文件
file.delete有时会失败,解决 解决file.delete失败问题 最近在项目中遇到是要FIle的delete方法后,文件一直删除不了,经排查,是当时刚好有文件处于读取状态(可能是文件夹里面直 ...
- 关于java文件删除file.delete()无法删除文件的处理办法
1.问题: file.delete()无法删除文件file.delete()无法删除文件,无论执行多少次结果都为false: 2.分析原因: 1).有可能有流对该文件进行操作,或者是流操作完没有进行关 ...
- 解决File.Delete()删除不掉文件
首先注意以下问题: 此文件被使用的时候无法删除(比如网络输出没关闭流) 判断此文件是否存在再做删除(exists) 删除文件夹之前先删除文件夹下的所有文件(递归解决) 判断是否删除成功会有返回值,文件 ...
- java delete file 失败_file.delete()无法删除文件的原因及解决方法
file.delete()无法删除文件的原因及解决方法 发布时间:2020-05-06 09:41:00 来源:亿速云 阅读:756 作者:小新 今天小编给大家分享的是file.delete()无法删 ...
- android删除本地图片,Android中结合contentResolver.delete和file.delete实现本地图片的删除...
最近做的一个需求是:将拍照或相册的图片上传服务器后删除对应的本地图片.在实现这个简单的需求的过程中却碰到了两个意想不到的问题. 这两个问题源自于删除本地图片时选用的两个不同的方法 file.delet ...
- shift+delete删除的文件还能恢复吗?可以的!
**shift+delete删除的文件还能恢复吗?**相信不少用户喜欢使用Shift+Delete快捷键来删除文件,不过使用Shift+Delete快捷键删除的文件是不经过回收站的,因此我们是无法在回 ...
- sql delete删除的数据怎么恢复_如何恢复按下Shift + DELETE键永久删除的文件和资料夹?...
简单删除和Shift+Delete永久删除 想删除电脑上的任何文件,有以下两种方式: ① 按「DELETE」键简单删除文件.在这种模式下,文件被移动到回收站.此时,如果我们想要恢复已删除的文件和资料夹 ...
- 怎么恢复回收站删除的文件?3个方法汇总助您快速解决
怎么恢复回收站删除的文件?回收站里的文件删除之后去哪里了?回收站是用来存放各种删除的文件,虽然文件已经在电脑上的其他地方被删除,比如在桌面上删除了某个文件,但却依然保存在回收站里.回收站文件恢复的方式 ...
最新文章
- 【Groovy】map 集合 ( map 集合操作符重载 | 使用 << 操作符添加一个元素 | 代码示例 )
- 阿里云中间件技术 促进互联网高速发展
- TF之pix2pix:基于TF利用Facades数据集训练pix2pix模型、测试并进行生成过程全记录
- linux 配置快速查看
- Java黑皮书课后题第1章:1.5(计算表达式)编写程序,显示以下式子的结果
- 第七章 路由器、交换机及其操作系统介绍
- centos7 安装webmin
- LCDM--商品潜在互补性发现模型
- 【等价转换】—— 整数的变换
- 不应忘却的纪念-小百合(Lilybbs)
- safari浏览网页打开速度很慢如何解决
- 给你的个人网站领养只萌萌的小仓鼠
- 常识 | drm kms 详解
- 分别利用opencv和matplotlib.pyplot来展示图片
- JAVA电影院售票网站计算机毕业设计Mybatis+系统+数据库+调试部署
- selenium三种方法isEnable()、isDisplayed()和isSelected()的区别
- 苹果系10大必备应用
- 航天器空间任务及在轨分析工具 — SYSTEMA
- Windows2012上如何查光纤卡HBA的WWN
- 指导学生计算机技能大赛,数学与计算机科学学院2016年学生教学技能大赛活动方案...