保留最近7天的zip文件并删除目录中的所有文件

时间:2013-09-14 04:12:05

标签: java file

我开发了一个将源文件从源目录移动到目标目录的应用程序 通过使用apache Fileutils类方法如下所示。

private void filemove(String FilePath2, String s2) { 

    String filetomove = FilePath2 + s2;    //file to move its complete path
    File f = new File(filetomove);
    File d = new File(targetFilePath); //    path of target directory 
    try {
        FileUtils.copyFileToDirectory(f, d);
        f.delete(); //from source dirrectory we are deleting the file if it succesfully move
    //*********** code need to add to delete the zip files of target directory and only keeping the latest two zip files  ************//        
    } catch (IOException e) {
        String errorMessage =  e.getMessage();
        logger.error(errorMessage);

    }

}

现在当我将文件移动到目标目录时,那么在这种情况下目标目录将具有某些zip文件,我正在尝试的是  什么时候我将我的源文件移动到目标目录...它应该做一个预检查,以便在目标目录中它应该删除所有的zip文件,但只保留最近7天的zip文件(所以它不应该删除最近7天的zip文件)

我试过的是最近两天的zip文件,它保存了最近两天的zip文件。

请告知我如何在七天内更改此内容,以便保留最近七天的zip文件? 获取数组中的所有文件,然后对它们进行排序,然后忽略前两个:

    Comparator<File> fileDateComparator = new Comparator<File>() {
        @Override
        public int compare(File o1, File o2) {
            if(null == o1 || null == o2){
                return 0;
            }
            return (int) (o2.lastModified() - o1.lastModified());//yes, casting to an int. I'm assuming the difference will be small enough to fit.
        }
    };

    File f = new File("/tmp");
    if (f.isDirectory()) {
        final File[] files = f.listFiles();
        List<File> fileList = Arrays.asList(files);
        Collections.sort(fileList, fileDateComparator);
        System.out.println(fileList);
    }

1 个答案:

答案 0 :(得分:2)

你真的需要排序吗?如果您需要删除超过7天的文件,请获取lastModifieddate并从当前时间减去它。如果差异超过7 * 24 * 60 * 60秒,则可以删除它。

你需要的只是f.listFiles()行之后的for循环。不是实际代码 - 用于获取工作代码。

long  timeInEpoch = System.currentTimeMillis(); // slightly faster than new Date().getTimeInMillis();
File f = new File("/tmp");
if (f.isDirectory()) {
    final File[] files = f.listFiles();
    for(int i =0; i < files.length ; i++ ) {
       if( timeInEpoch  - f.lastModifiedDate()  > 1000*60*60*24*7 )  
           files[i].delete();
    }
    System.out.println(fileList);
}