Android 刪除某天前的檔案

APP 內要實作出以下功能

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

 

所以本文介紹以下內容

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

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

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

 

 

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

[sourcecode language=”JAVA”]

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();
}
}
[/sourcecode]

 

 

 

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

[sourcecode language=”JAVA”]

//利用下方 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;
}
[/sourcecode]

 

 

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

[sourcecode language=”JAVA”]

//呼叫刪除檔案

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;
}
[/sourcecode]

 

標籤: , ,

About: Kaito


發佈留言

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

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