Android 中File.delete()无法正常删除文件夹
2016-07-05 01:00
459 查看
项目中有个需求,用户通过本地或者手机拍照把多张图片截图并存储在本地文件夹FilePhoto,当用户执行完上传操作后就把FilePhoto文件夹下所有图片删除掉,刚开始代码是这样写的:
因为FilePhoto是存储在SDcard中的,所以先获取rootPathSD路径,再加文件名称来获取该文件的根路径,通过这个根路径得到FilePhoto文件夹的File对象,使用file.exists()来判断文件是否存在,存在则通过file.delete()删除它,file.delete()如果删除成功则返回true,不成功则返回false。
程序看来起来一切都很正常,调用该方法时file.delete()返回的也是true,但是文件夹就是删除不掉,这是为何?
一般调用file.delete()方法不能正常删除的原因主要如下几点:
1、当前操作的File文件正在被其它进程引用
2、File文件是个文件夹且不为空,里面含有其它文件或文件夹
3、之前使用了这个File文件的文件流,并且没有关闭此File文件的文件流
经过检查,我的问题属于第二个原因,解决思路为:获取FilePhoto文件夹中的所有文件,得到它们的路径,再一个一个的删除掉。
通过File.listFiles()方法可以获得FilePhoto文件夹下所有文件和文件夹,并返回一个File[]数组,由于我这里可以确定FilePhoto文件夹下只会存在文件,没有文件夹,所以只使用files[i].isFile()进行判断,如果是文件,则通过调用getPath()方法取得该文件的绝对路径,再根据得到的绝对路径获得File对象,最后调用delete()方法删除即可。
注意不能在代码中这么写:
这样写的话执行一次就跳出循环和方法了,这样删除不了所有文件。
如果文件夹中还存在文件夹且不为空怎么办呢?可以使用files[i].isDirectory()判断一下文件是否为文件夹,是文件夹的话则再通过同样的方法把里面的文件遍历一遍删除掉。
public static boolean DelFilePhoto() { String rootPathSD = Environment.getExternalStorageDirectory().getPath(); File file = new File(rootPathSD + "/FilePhoto"); if (file.exists()) { return file.delete(); } return false; }
因为FilePhoto是存储在SDcard中的,所以先获取rootPathSD路径,再加文件名称来获取该文件的根路径,通过这个根路径得到FilePhoto文件夹的File对象,使用file.exists()来判断文件是否存在,存在则通过file.delete()删除它,file.delete()如果删除成功则返回true,不成功则返回false。
程序看来起来一切都很正常,调用该方法时file.delete()返回的也是true,但是文件夹就是删除不掉,这是为何?
一般调用file.delete()方法不能正常删除的原因主要如下几点:
1、当前操作的File文件正在被其它进程引用
2、File文件是个文件夹且不为空,里面含有其它文件或文件夹
3、之前使用了这个File文件的文件流,并且没有关闭此File文件的文件流
经过检查,我的问题属于第二个原因,解决思路为:获取FilePhoto文件夹中的所有文件,得到它们的路径,再一个一个的删除掉。
public static void DelFilePhoto() { String rootPathSD = Environment.getExternalStorageDirectory().getPath(); File file = new File(rootPathSD + "/FilePhoto"); File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isFile()){ File photoFile = new File(files[i].getPath()); Log.d("photoPath -->> ", photoFile.getPath()); photoFile.delete(); } } }
通过File.listFiles()方法可以获得FilePhoto文件夹下所有文件和文件夹,并返回一个File[]数组,由于我这里可以确定FilePhoto文件夹下只会存在文件,没有文件夹,所以只使用files[i].isFile()进行判断,如果是文件,则通过调用getPath()方法取得该文件的绝对路径,再根据得到的绝对路径获得File对象,最后调用delete()方法删除即可。
注意不能在代码中这么写:
... if (files[i].isFile()){ File photoFile = new File(files[i].getPath()); Log.d("photoPath -->> ", photoFile.getPath()); return photoFile.delete(); } ...
这样写的话执行一次就跳出循环和方法了,这样删除不了所有文件。
如果文件夹中还存在文件夹且不为空怎么办呢?可以使用files[i].isDirectory()判断一下文件是否为文件夹,是文件夹的话则再通过同样的方法把里面的文件遍历一遍删除掉。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法