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);
}
}
}
}
Esto funciona solo para archivos de carpetas de proyectos. Pero tengo algunas carpetas y archivos en la carpeta Proyecto, y cada carpeta tiene algunas carpetas y archivos.
¿Cómo puedo verificar dentro de todas las carpetas y verificar la última fecha de modificación de los archivos y eliminarlos si tienen más de 7 días?
Por ejemplo, tengo el directorio: C:/Proyecto/JavaIdea/... Si los archivos en la carpeta JavaIdea tienen más de 7 días, necesito eliminar todos los archivos y la carpeta JavaIdea también.
Solución del problema
La forma más fácil es probablemente usar Files.walkFileTree
. Files.walk
te da un Stream<Path>
, pero las carpetas van primero, no después. Por FileVisitor
otro lado, usa dos eventos para carpetas: antes de visitar y después.
Algo que podría funcionar (no probado):
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;
}
});
No hay comentarios.:
Publicar un comentario