从目录中删除比给定时间早的文件

问题描述:

我已经创建了一些文件列表,以便在应用程序中打开一次后才能存储某些属性。 每次打开文件时,这些属性都会更改,因此我将它们删除并重新创建。从目录中删除比给定时间早的文件

我一直在使用

File file =new File(getExternalFilesDir(null), 
       currentFileId+""); 
if(file.exists()){ 
      //I store the required attributes here and delete them 
      file.delete(); 
}else{ 
      file.createNewFile(); 
} 

我想删除所有在这里一个多星期年长这些文件的,与存储的属性将不再需要任何更多创建的所有文件的文件。 这样做的适当方法是什么?

+1

创建文件临时存储属性听起来像一个坏主意,如果你的属性是数字或字符串。 将数据存储在SQL数据库中可能更加高效和实用。 – Christian 2014-09-12 11:46:36

+0

这些文件的尺寸很小 我不知道这些文件的数量是否会增加,并且使用相对较小的内存空间填充设备的内存,这会产生问题。 仅用于此目的我想删除这些文件。 – 2014-09-12 11:50:01

这应该做的伎俩。它将在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; 
} 
+0

File file = new File(getExternalFilesDir(null), currentFileId +“”); 它创建与id.I的filenamed我想删除文件,而不知道文件名是什么,因为我不会记住每个文件的所有这些id – 2014-09-12 11:45:42

+1

然后,您可以遍历目录中的所有文件,并检查他们是否他们大于7天。 – 2014-09-12 11:49:12

+0

我在迭代时遇到问题,不知道文件名我想删除它们 – 2014-09-12 11:52:14

File.lastModified()返回一个长整型在Unix Time

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 
    } 
} 
+0

无论如何,无需将文件的修改过的长整型转换为日期,因为您仍然使用毫秒。但总体来说也是一个好方法。 – 2014-09-12 11:56:00

+0

谢谢我得到了我的解决方案:)结合你的代码与@PedroOliveira – 2014-09-13 10:18:49

+0

是一周还是一天? :P – 2014-09-13 10:28:24