您的位置:首页 > 移动开发 > Android开发

Android 中File.delete()无法正常删除文件夹

2016-07-05 01:00 459 查看
项目中有个需求,用户通过本地或者手机拍照把多张图片截图并存储在本地文件夹FilePhoto,当用户执行完上传操作后就把FilePhoto文件夹下所有图片删除掉,刚开始代码是这样写的:

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()判断一下文件是否为文件夹,是文件夹的话则再通过同样的方法把里面的文件遍历一遍删除掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息