gpt4 book ai didi

Java删除超过N天的文件

转载 作者:行者123 更新时间:2023-12-02 07:49:39 25 4
gpt4 key购买 nike

我想要一些 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
{
}
}

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

最佳答案

尝试使用Calendar -类代替:

 Calendar cal = Calendar.getInstance();  
cal.add(Calendar.DAY_OF_MONTH, daysBack * -1);
long purgeTime = cal.getTimeInMillis();

或者尝试this solution :

您的天数是否超过24?如果是这样,则存在溢出问题。

如果天数为25,则该值为:

25 * 24 * 60 * 60 * 1000

数学值为2160000000。但是,该值大于 Integer.MAX_VALUE,因此该值会溢出到-12516353。因此,清除时间将在未来,并且永远不会满足。大于25的值只会使问题变得更糟;甚至有可能溢出非常严重,以至于乘法结果再次变为正值,从而可能清除所有文件。

修复很简单:

  1. daysBack 声明为 long
  2. daysBack 转换为 long

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

    long purgeTime = System.currentTimeMillis() - (daysBack * 24L * 60L * 60L * 1000L); 

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

关于Java删除超过N天的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6866694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com