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只会使问题变得更糟; 甚至可能溢出是如此糟糕,以至于乘法再次导致正值,导致可能清除所有文件.
修复很简单:
daysBack为long投到daysBack了long
long purgeTime = System.currentTimeMillis() - ((long)daysBack * 24 * 60 * 60 * 1000);
Run Code Online (Sandbox Code Playgroud)在计算中使用显式长文字:
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)
谢谢