![](/img/trans.png)
[英]Recreating a folder structure inside a Zip file with Java - Empty folders
[英]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.