我的代码是删除名称中包含字符串“hss”的所有文件。这适用于我的内部存储器中的所有文件,但它不会删除文件夹中存在的文件。
如何让它发挥作用?
public class RemoveApkTraces extends Activity {
// getting SDcard root path
File dir = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.done_ui);
// at the end of oncreate
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
new ExplorerDBOperation().execute();
}
}, 300);
}
class ExplorerDBOperation extends AsyncTask<Void, Boolean, Boolean> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = ProgressDialog.show(RemoveApkTraces.this, "Please wait",
"Processing.........");
}
@Override
protected Boolean doInBackground(Void... params) {
String Patternjpg = "hss";
File listFile[] = dir.listFiles();
if (listFile != null) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
} else {
if (listFile[i].getName().contains(Patternjpg)) {
// Do what ever u want
listFile[i].delete();
}
}
}
}
return true;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
}
答案 0 :(得分:0)
您的示例中包含以下代码:
if (listFile[i].isDirectory()) {
}
在大括号内添加一些内容...您可以将大部分doInBackground
方法重构为单独的方法deleteDirectory
并以递归方式调用此方法。或者,如果您担心可能存在非常深的目录结构,那么您可以使用Dir
的列表/堆栈进行遍历以避免递归。
答案 1 :(得分:0)
当找到文件夹时,您必须提取方法并使用递归(调用方法本身):
String Patternjpg = "hss";
@Override
protected Boolean doInBackground(Void... params) {
deleteFrom(dir);
return true;
}
private void deleteFrom(File dir) {
File listFile[] = dir.listFiles();
if (listFile != null) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
// recursive call:
// if you find a folder, call method again!
deleteFrom(listFile[i]);
} else {
if (listFile[i].getName().contains(Patternjpg)) {
// Do what ever u want
listFile[i].delete();
}
}
}
}
}
注意: 我没有测试代码本身我只是动态编写方法!