删除在目录(但不是目录)中创建到昨天的所有文件 - 一个班轮解决方案

时间:2017-06-30 15:27:01

标签: java file-io

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

我试过这个但是直到昨天才能删除文件。

for(File file: new File(strFile).listFiles()) 
      if (!file.isDirectory() && file.lastModified() < 1.0) 
         file.delete();

2 个答案:

答案 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()));
  }
}