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]