从目录中删除超过给定时间的文件

时间:2014-09-12 11:33:32

标签: android file-io

我已经创建了一些文件列表,用于在我的应用程序中打开一个属性后存储它们。 每次打开文件时,这些属性都会被更改,因此我将其删除并重新创建。

我已使用

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

我想在这里删除所有这些早于一周的文件,因为这些存储的属性不再需要了。 这样做的适当方法是什么?

3 个答案:

答案 0 :(得分:16)

这应该可以解决问题。它将在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;
}

答案 1 :(得分:2)

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

答案 2 :(得分:0)

File.lastModified()在Unix Time

中返回一个长Int