从目录中删除比给定时间早的文件
我已经创建了一些文件列表,以便在应用程序中打开一次后才能存储某些属性。 每次打开文件时,这些属性都会更改,因此我将它们删除并重新创建。从目录中删除比给定时间早的文件
我一直在使用
File file =new File(getExternalFilesDir(null),
currentFileId+"");
if(file.exists()){
//I store the required attributes here and delete them
file.delete();
}else{
file.createNewFile();
}
我想删除所有在这里一个多星期年长这些文件的,与存储的属性将不再需要任何更多创建的所有文件的文件。 这样做的适当方法是什么?
这应该做的伎俩。它将在7天前创建一个日历实例,并比较文件的修改日期是否在该时间之前。如果这意味着文件大于7天。
if(file.exists()){
Calendar time = Calendar.getInstance();
time.add(Calendar.DAY_OF_YEAR,-7);
//I store the required attributes here and delete them
Date lastModified = new Date(file.lastModified());
if(lastModified.before(time.getTime()))
{
//file is older than a week
}
file.delete();
}else{
file.createNewFile();
}
如果你想获得一个目录中的所有文件,你可以使用它,然后迭代结果并比较每个文件。
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;
}
File file = new File(getExternalFilesDir(null), currentFileId +“”); 它创建与id.I的filenamed我想删除文件,而不知道文件名是什么,因为我不会记住每个文件的所有这些id – 2014-09-12 11:45:42
然后,您可以遍历目录中的所有文件,并检查他们是否他们大于7天。 – 2014-09-12 11:49:12
我在迭代时遇到问题,不知道文件名我想删除它们 – 2014-09-12 11:52:14
if (file.exists()) {
Date today = new Date();
int diffInDays = (int)((today.getTime() - file.lastModified()) /(1000 * 60 * 60 * 24));
if(diffInDays>7){
System.out.println("File is one week old");
//you can delete the file here
}
}
无论如何,无需将文件的修改过的长整型转换为日期,因为您仍然使用毫秒。但总体来说也是一个好方法。 – 2014-09-12 11:56:00
谢谢我得到了我的解决方案:)结合你的代码与@PedroOliveira – 2014-09-13 10:18:49
是一周还是一天? :P – 2014-09-13 10:28:24
创建文件临时存储属性听起来像一个坏主意,如果你的属性是数字或字符串。 将数据存储在SQL数据库中可能更加高效和实用。 – Christian 2014-09-12 11:46:36
这些文件的尺寸很小 我不知道这些文件的数量是否会增加,并且使用相对较小的内存空间填充设备的内存,这会产生问题。 仅用于此目的我想删除这些文件。 – 2014-09-12 11:50:01