En utilisant l'api java-7 nio, le calcul de la taille du dossier peut être effectué beaucoup plus rapidement.
Voici un exemple prêt à l'emploi qui va également sauter et enregistrer les répertoires dans lesquels il ne peut pas entrer. Il utilise java.util.concurrent.atomic.AtomicLong pour accumuler l'état.
public static void main(String[] args) throws IOException {
long size = getSize("c:/");
System.out.println("size=" + size);
}
static long getSize(String startPath) throws IOException {
final AtomicLong size = new AtomicLong(0);
Path path = Paths.get(startPath);
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
size.addAndGet(attrs.size());
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc)
throws IOException {
// Skip folders that can't be traversed
System.out.println("skipped: " + file + "e=" + exc);
return FileVisitResult.CONTINUE;
}
});
return size.get();
}
0 votes
Même chose mais en mettant l'accent sur l'efficacité : stackoverflow.com/questions/116574/
0 votes
Si vous êtes sur Android alors jetez un coup d'œil à
StatFs
. Il utilise les statistiques du système de fichiers et est presque 1000x plus rapide que les méthodes récursives, qui étaient inutilisables pour nos besoins. Notre implémentation peut être trouvée ici : stackoverflow.com/a/58418639/293280