项目中有个需求,用户通过本地或者手机拍照把多张图片截图并存储在本地文件夹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()判断一下文件是否为文件夹,是文件夹的话则再通过同样的方法把里面的文件遍历一遍删除掉。
项目中有个需求,用户通过本地或者手机拍照把多张图片截图并存储在本地文件夹FilePhoto,当用户执行完上传操作后就把FilePhoto文件夹下所有图片删除掉,刚开始代码是这样写的: public static boolean DelFilePhoto() { String rootPathSD = Environment.getExternalStorageDirectory
1。未及时停止文件io流。
2。准备删除的文件路径不存在。
3。准备删除的文件是文件夹,文件夹内存在文件(如果想要删除整个文件夹的话,必须先挨个删除文件夹里面的内容)
如果是2,3的话,可以使用以下的代码进行删除。
private boolean deleteFiles(File file){
if(file.isDirectory()){ //判断是否是文件夹
File[] files
InputStream ins = file.getInputStream();
//zip放在临时目录,重命名为 rc-oss前缀,.zip结尾的文件,示例 :rc-oss5195741985659908476.zip
File tempZip = File.createTempFile(OssConstant.APP_BIZ, OssConstant.ZIPFILE_SUFFIX);
FileUtil.writeFro