1、通过FileFilter()方法找到要删除的目录,如:

//返回要删除的目录列表File[] childFiles = part.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {String name = pathname.getName().toLowerCase();Logger.d("accept---------------name = " + name);return name.equals(delete_file);}});

2、通过递归的方式删除目录下的子目录

/** * 删除某个目录 * @param path 要删除的目录路径 * @return */private boolean deleteDirs(String path){Logger.d("path = " + path);File file = new File(path);if (!file.exists()){return true;}if (file.isDirectory()){File[] childs = file.listFiles();if (null == childs){return false;}boolean result = true;for (File child : childs){result = result && deleteDirs(child.getAbsolutePath());}Logger.d("file1-------------------" + file.toString());try{boolean ret = file.delete();return result && ret;}catch(Exception e){e.printStackTrace();return false;}}else {Logger.d("file2-------------------" + file.toString());try {boolean ret = file.delete();return ret;} catch (Exception e) {e.printStackTrace();return false;}}}

3、当目录中内容比较多,占用很大空间的时候,需要考虑阻塞主线程的情况,所以要继承AsyncTask来执行删除的操作

/** * 通过异步的方式来执行删除操作 * @author ytkj * */private class DeleteFileTask extends AsyncTask{@Overrideprotected void onPreExecute() {super.onPreExecute();Logger.d();mTextView.setVisibility(View.VISIBLE);//mTextView.setText("正在删除" + DELETE_PART + DELETE_FILE + "....");mTextView.setText(mContext.getResources().getString(R.string.delete_running, DELETE_PART + DELETE_FILE, "...."));}@Overrideprotected String doInBackground(String... params) {Logger.d();String delete_part = params[0];final String delete_file = params[1];File part = new File(delete_part);Logger.d("delete_part = " + delete_part + " ,delete_file = " + delete_file + " ,part = " + part);if (!part.exists() || (!part.isDirectory())){Logger.d("part = " + part);return mContext.getResources().getString(R.string.please_check, part);}//返回要删除的目录列表File[] childFiles = part.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {String name = pathname.getName().toLowerCase();Logger.d("accept---------------name = " + name);//return name.contains(delete_file);return name.equals(delete_file);}});if (null == childFiles){Logger.d("null == childFiles");return mContext.getResources().getString(R.string.please_check, delete_part + delete_file);}else {boolean result = true;for (File child : childFiles){Logger.d("child = " + child.getAbsolutePath());boolean ret = deleteDirs(child.getAbsolutePath());result = result && ret;if (!ret){Logger.d("delete failed : " + child.getAbsolutePath());}}return result ? (mContext.getResources().getString(R.string.delete_success, delete_part + delete_file)): (mContext.getResources().getString(R.string.delete_fail, delete_part + delete_file));}}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);Logger.d("result = " + result);mTextView.setText(result);}}

4、点击onClick来测试删除目录的结果:

@Overridepublic void onClick(View v) {Logger.d();String delete_part = deletePart.getText().toString().trim();String delete_file = deleteFile.getText().toString().trim();if (v.getId() == R.id.delete_file){if (!TextUtils.isEmpty(delete_part)){if (!TextUtils.isEmpty(delete_file)){new DeleteFileTask().execute(delete_part, delete_file);}}else{mTextView.setText( mContext.getResources().getString(R.string.please_check, delete_part));}}}

5、例如要删除/sdcard/LOG这个目录,布局如下:

6、执行删除操作后结果

日志打印:

代码参考:https://github.com/gunder1129/android-tool/tree/master/ToolTemplate

 

更多相关文章

  1. C语言函数的递归(上)
  2. Android(安卓)SDK的默认目录导致的AVD启动时各种找不到
  3. FFMpeg For Android之Ubuntu下编译
  4. android studio proguard 混淆微信libammsdk.jar报错
  5. Android(安卓)三种延迟操作的实现方法
  6. 深入剖析ndk配置环境VS简易配置jni流程
  7. Android的多线程限制
  8. ReactNative项目把Android/ios/react剥离出来独立模块
  9. Android(安卓)获取缓存大小及清除

随机推荐

  1. 补全Gemfile缺少到javascript gem
  2. Ajax的实用技术——用户的注意力从页面的
  3. 为什么通过JavaScript更改样式会受到CSS
  4. 对jquery的 attr()和prop()理解
  5. JavaScript中,提取子字符串方法:Slice、S
  6. 【JavaScript】离线应用与客户端存储
  7. javascript入门笔记(1)——变量和计算
  8. js关于Function.prototype.bind
  9. RichFaces 3.3.3 和 JSF 2.0
  10. js中ajax获取json数据遍历提示undefined