Android 刪除某天前的檔案

APP 內要實作出以下功能

刪除資料夾 shared_prefs 下, 3 天前,檔名中包含 pleaseDeleteMe 的檔案

 

所以本文介紹以下內容

1. 偵測某檔案是否上次修改時間距今已超過 3 天 ?

2. 抓取資料夾 shared_prefs 底下,檔名中包含 pleaseDeleteMe 的所有檔案

3. 刪除資料夾 shared_prefs 底下,檔名中包含 pleaseDeleteMe 的,且上次更新日期已是 3 天前的所有檔案

 

 

1. 偵測某檔案是否上次修改時間距今已超過 3 天 ?

if (file.exists()) {
     Calendar time = Calendar.getInstance();
     time.add(Calendar.DAY_OF_YEAR, -3); // -3 代表 3 天前

     Date lastModified = new Date(file.lastModified());
     if(lastModified.before(time.getTime()))
     {
         //如果檔案上次修改時間距今 3 天前了,要做些甚麼
         // 例如,可以刪除此檔案 file.delete();
     }
}

 

 

 

2. 取得資料夾 shared_prefs 底下,檔名中包含 pleaseDeleteMe 的所有檔案

//利用下方 getAllFilesInDir() 取得 shared_prefs 資料夾底下的檔案
ArrayList files = getAllFilesInDir(new File("/data/data/package_name/shared_prefs"));
//取得某資料夾底下的所有檔案
public static ArrayList<File> getAllFilesInDir(File dir) {
    if (dir == null)
        return null;

    ArrayList<File> files = new ArrayList<File>();

    Stack<File> dirlist = new Stack<File>();
    dirlist.clear();
    dirlist.push(dir);

    while (!dirlist.isEmpty()) {
        File dirCurrent = dirlist.pop();

        File[] fileList = dirCurrent.listFiles();
        for (File aFileList : fileList) {
            if (aFileList.isDirectory())
                dirlist.push(aFileList);
            else
                files.add(aFileList);
        }
    }

    return files;
}

 

 

3. 刪除資料夾 shared_prefs 底下,檔名中包含 pleaseDeleteMe 的,且上次更新日期已是 3 天前的所有檔案

//呼叫刪除檔案

deleteFilesInSharedPrefs();


//幫我刪除 shared_prefs 底下,檔名中包含 pleaseDeleteMe 的,且上次更新日期已是 3 天前的所有檔案
private void deleteFilesInSharedPrefs() {
    //先取得資料夾底下所有檔案
    ArrayList files = getAllFilesInDir(new File("/data/data/package_name/shared_prefs"));
    
    //定規則,只取出檔名裡有 pleaseDeleteMe 字串的檔案
    Pattern pattern = Pattern.compile("pleaseDeleteMe"); 

    for (int i = 0; i < files.size(); i++) {
        File file = (File) files.get(i);
        if (file.exists()) {
            Calendar time = Calendar.getInstance();
            time.add(Calendar.DAY_OF_YEAR, -3); //判斷要刪除的時間點(三天前的)
            Date lastModified = new Date(file.lastModified()); //檔案上次修改時間

            if (lastModified.before(time.getTime())) {

                //依規則比對檔名
                Matcher matcherPleaseDeleteMeFile = pattern.matcher(file.getName()); 

                //如果有找到
                while (matcherPleaseDeleteMeFile.find()) {
                    file.delete(); //刪除
                }
            }

        }
    }
}

//取得某資料夾底下的所有檔案
public static ArrayList<File> getAllFilesInDir(File dir) {
    if (dir == null)
        return null;

    ArrayList<File> files = new ArrayList<File>();

    Stack<File> dirlist = new Stack<File>();
    dirlist.clear();
    dirlist.push(dir);

    while (!dirlist.isEmpty()) {
        File dirCurrent = dirlist.pop();

        File[] fileList = dirCurrent.listFiles();
        for (File aFileList : fileList) {
            if (aFileList.isDirectory())
                dirlist.push(aFileList);
            else
                files.add(aFileList);
        }
    }

    return files;
}

 

標籤: , ,

About: Kaito


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料