Java删除超过N天的文件

use*_*432 2 java file file-management

我想要一些Java代码来删除超过N天的文件.

这是我的尝试,但它不能正常工作.

public void deleteFilesOlderThanNdays(final int daysBack, final String dirWay) {

    System.out.println(dirWay);
    System.out.println(daysBack);

    final File directory = new File(dirWay);
    if(directory.exists()){
        System.out.println(" Directory Exists");
        final File[] listFiles = directory.listFiles();          
        final long purgeTime = 
            System.currentTimeMillis() - (daysBack * 24 * 60 * 60 * 1000);

        System.out.println("System.currentTimeMillis " + 
            System.currentTimeMillis());

        System.out.println("purgeTime " + purgeTime);

        for(File listFile : listFiles) {
            System.out.println("Length : "+ listFiles.length);
            System.out.println("listFile.getName() : " +listFile.getName());
            System.out.println("listFile.lastModified() :"+
                listFile.lastModified());

            if(listFile.lastModified() < purgeTime) {
                System.out.println("Inside File Delete");
            }
        }
    } 
    else 
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有一些简单的代码可以删除目录中N天以前的文件?

Tim*_*ter 11

尝试使用Calendar -Class:

 Calendar cal = Calendar.getInstance();  
 cal.add(Calendar.DAY_OF_MONTH, daysBack * -1);  
 long purgeTime = cal.getTimeInMillis();   
Run Code Online (Sandbox Code Playgroud)

或尝试此解决方案:

你的天数是多少24?如果是这样,您有溢出问题.

如果天数是25,则值将为:

25 * 24 * 60 * 60 * 1000
Run Code Online (Sandbox Code Playgroud)

数学值是2160000000.但是,这大于Integer.MAX_VALUE,因此值溢出 -12516353.因此,清除时间将在未来,永远不会得到满足.大于的值25只会使问题变得更糟; 甚至可能溢出是如此糟糕,以至于乘法再次导致正值,导致可能清除所有文件.

修复很简单:

  1. 声明daysBacklong
  2. 投到daysBacklong

    long purgeTime = System.currentTimeMillis() - ((long)daysBack * 24 * 60 * 60 * 1000);  
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在计算中使用显式长文字:

    long purgeTime = System.currentTimeMillis() - (daysBack * 24L * 60L * 60L * 1000L); 
    
    Run Code Online (Sandbox Code Playgroud)

对于所有三种解决方案,第一个和/或第二个操作数为long的事实将整个结果转换为long,允许值2160000000不会溢出.


小智 5

我使用这个简单的代码片段来删除超过N天的文件

在此片段中,删除基于文件最后修改日期时间

daysBack =删除超过N天的文件
dirWay =包含文件的目录

public static void deleteFilesOlderThanNdays(int daysBack, String dirWay) {

File directory = new File(dirWay);
if(directory.exists()){

    File[] listFiles = directory.listFiles();           
    long purgeTime = System.currentTimeMillis() - (daysBack * 24 * 60 * 60 * 1000);
    for(File listFile : listFiles) {
        if(listFile.lastModified() < purgeTime) {
            if(!listFile.delete()) {
                System.err.println("Unable to delete file: " + listFile);
            }
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

谢谢