在Java中获取目录中最近7天修改的所有文件

7
我希望用Java获取最近7天修改的文件,一旦获取到这些文件,我需要对它们进行其他文件操作。
目前,我可以从目录中获取所有文件并执行文件操作。请建议如何获取最近7天修改的文件。
以下是我用来从目录中获取文件并执行文件操作的代码。
String target_dir = "D:/Reports/Project";
        File dir = new File(target_dir);
        File[] files = dir.listFiles();
        int count = 0;
        for (File f : files) {
            if(f.isFile()) {
                BufferedReader inputStream = null;
                FileReader in = null;
                try {
                    // Working Code
                    }catch (Exception e) {                   
                    System.out.println("Error while retreiving files ");                  
                }
                finally {
                    if (inputStream != null) {
                        inputStream.close();
                    }
                }
              }

请提供建议。先行谢过。
5个回答

5
public static void main(String[] args) throws IOException {
    String dir = "myDirectory";

    // cutoff date:
    Instant lastWeek = Instant.now().minus(7, ChronoUnit.DAYS);

    // find with filter
    Files.find(Paths.get(dir), Integer.MAX_VALUE,
        (p, a) -> {
            try {
                return Files.isRegularFile(p)
                    && Files.getLastModifiedTime(p).toInstant().isAfter(lastWeek);
            }
            catch(IOException e) {
                throw new RuntimeException(e);
            }
        })
        .forEach(System.out::println);
}

2

你可以尝试这个,这一定会对你有所帮助,

你只需要使用这些导入即可:

import java.io.File;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;

.......

public static void main(String[] args) {
    File f = new File("your-working-directory-path");

    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_MONTH, -7);

    Date lastDate = calendar.getTime();

    System.out.println(lastDate);

    for(String file : f.list()){

        String filePath = f.getAbsolutePath() + File.separator + file;;

        File f1 = new File(filePath);

        long diffInDays = getDateDiff(lastDate,new Date(f1.lastModified()),TimeUnit.DAYS);

        if(Math.abs(diffInDays) <= 7){
            // do your stuff here...
        }
    }

}

public static long getDateDiff(Date date1, Date date2, TimeUnit timeUnit) {
    long diffInMillies = date2.getTime() - date1.getTime();
    return timeUnit.convert(diffInMillies,TimeUnit.MILLISECONDS);
}

将 f1.lastModified() 替换为 f.lastModified() 对我有用。 - Krishna
@KrishnaD,请看代码,应该是f1.last...而不是f.last...另外请注意我更新了-7而不是-5,现在你能检查一下是否适用于你吗? - Vishal Gajera
f1.last... 对我不起作用。相反,f.last... 正常工作。 - Krishna

2

1
尝试使用FileFilter。
    long weekAgo = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(7);

    File directory = new File(target_dir);
    File[] files = directory.listFiles(pathname -> pathname.lastModified() >= weekAgo);

    for (File file : files) {
        // Your code
    }

0
使用File类的lastModified()方法。这将返回文件的最后修改时间戳,然后您可以检查它是否在最近7天内。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接