如何在目录(但不是目录)中删除昨天创建的所有旧文件?
我试过这个但是直到昨天才能删除文件。
for(File file: new File(strFile).listFiles())
if (!file.isDirectory() && file.lastModified() < 1.0)
file.delete();
答案 0 :(得分:1)
首先是lastModified返回:
表示文件上次修改时间的长值, 从纪元开始以毫秒为单位(格林尼治标准时间00:00:00,1月1日, 1970),如果文件不存在或发生I / O错误,则为0L
您需要以毫秒为单位获取当前时间,然后减去上次修改的返回值,并验证它是否在目标期间之前被修改。或者以您想要的任何类型执行时间计算。
关注您的代码:
long day = 1000 * 60 * 60 * 24;
long now = System.currentTimeMillis();
for(File file: new File(DIRECTORY).listFiles())
if (!file.isDirectory() && (now - file.lastModified() > day))
file.delete();
理想情况下,您将此作为计划任务运行
答案 1 :(得分:0)
这是一个删除超过一天的所有临时文件的示例:
import org.apache.commons.lang3.Validate;
import java.io.File;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
public class StackOverflow44850006 {
/**
* deletes all the files in a directory modified before a given timestamp
*
* @param directoryPath path to delete from
* @param stamp everything with a mod date before this timestamp will be deleted
* @return the number of items deleted
*/
public static long deleteOld(final String directoryPath, final Date stamp) {
final File[] files = new File(directoryPath).listFiles();
Validate.notNull(files, "Unable to open dir. Does it exist?");
return Arrays.stream(files)
.filter(f -> !f.isDirectory())
.filter(f -> f.lastModified() < stamp.getTime())
.map(File::delete)
.filter(Boolean::booleanValue)
.count();
}
public static void main(String[] args) {
final String tempDir = System.getProperty("java.io.tmpdir");
final Calendar yesterday = Calendar.getInstance();
yesterday.add(Calendar.DATE, -1);
System.out.println(deleteOld(tempDir, yesterday.getTime()));
}
}