簡體   English   中英

如果文件夾為空則刪除文件夾內的文件和文件夾 (Java)

[英]Delete Files and Folders inside Folder if is empty (Java)

   String dirWay = "C:\\Project";
   int daysBack = 7;

    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);
               
            } else {

                System.out.println(listFile);
           }
       }
    }
}

這僅適用於項目文件夾文件。 但是我在Project文件夾中有一些文件夾和文件,每個文件夾都有一些文件夾和文件。

我如何檢查所有文件夾並檢查文件的上次修改日期,如果超過 7 天則將其刪除?

例如我有目錄:C:/Project/JavaIdea/... 如果 JavaIdea 文件夾中的文件超過 7 天,我也需要刪除所有文件和 JavaIdea 文件夾。

最簡單的方法可能是使用Files.walkFileTree Files.walk為您提供Stream<Path> ,但文件夾在前,而不是在后。 另一方面, FileVisitor對文件夾使用兩個事件 - 訪問之前和之后。

可以工作的東西(未經測試):

Deque<LongAdder> counts = new ArrayDeque<>(); // counting # of remaining files per level
Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs) {
        counts.push(new LongAdder());
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult postVisitDirectory(T dir, BasicFileAttributes attrs) throws IOException {
        long remaining = counts.pop().sum();
        if (remaining == 0) {
            // the directory is empty now, delete it
        }
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFile(T file, BasicFileAttributes attrs) throws IOException {
        if (is old enough to delete) {
            // delete
        } else {
            counts.peek().increment();
        }
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFileFailed(T file, IOException exc) {
        counts.peek().increment();
        return FileVisitResult.CONTINUE;
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM