在android中删除文件的正确方法

时间:2016-04-01 08:33:14

标签: android

我的代码是删除名称中包含字符串“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();
        }
    }
}

2 个答案:

答案 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();
                }
            }
        }
    }
}

注意: 我没有测试代码本身我只是动态编写方法!

相关问题