Java 删除目录(但不是目录)中直到昨天创建的所有文件-一行解决方案

Java 删除目录(但不是目录)中直到昨天创建的所有文件-一行解决方案,java,file-io,Java,File Io,如何删除目录(但不是目录)中直到昨天创建的所有旧文件 我试过了,但直到昨天才删除文件 for(File file: new File(strFile).listFiles()) if (!file.isDirectory() && file.lastModified() < 1.0) file.delete(); for(文件:新文件(strFile).listFiles()) 如果(!file.isDirectory()&&file.l

如何删除目录(但不是目录)中直到昨天创建的所有旧文件

我试过了,但直到昨天才删除文件

for(File file: new File(strFile).listFiles()) 
      if (!file.isDirectory() && file.lastModified() < 1.0) 
         file.delete();
for(文件:新文件(strFile).listFiles())
如果(!file.isDirectory()&&file.lastModified()<1.0)
delete();

上次修改的首次返回:

一个长值,表示上次修改文件的时间, 自纪元(格林威治标准时间1月1日00:00:00)起以毫秒为单位测量, 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();

理想情况下,您可以将此作为计划任务运行

下面是一个删除所有超过一天的临时文件的示例:

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()));
  }
}
import org.apache.commons.lang3.Validate;
导入java.io.File;
导入java.util.array;
导入java.util.Calendar;
导入java.util.Date;
公共类StackOverflow44850006{
/**
*删除在给定时间戳之前修改的目录中的所有文件
*
*@param directoryPath要从中删除的路径
*@param将删除在此时间戳之前带有mod date的所有内容
*@返回已删除的项目数
*/
公共静态长deleteOld(最终字符串directoryPath,最终日期戳){
最终文件[]文件=新文件(directoryPath).listFiles();
Validate.notNull(文件“无法打开目录。它存在吗?”);
返回Arrays.stream(文件)
.filter(f->!f.isDirectory())
.filter(f->f.lastModified()
运行该代码的结果是什么?这可能会有所帮助