Obtenir le fichier/répertoire de la taille à l'aide de Java 7 nouveaux IO
Comment puis-je obtenir la taille d'un fichier ou d'un répertoire à l'aide de la nouvelle NIO dans java 7?
- Quel est le problème avec l'ancienne? Sauf si il ya un soutien pour récursive de la taille des répertoires maintenant. Est-il?
- j'ai entendu dire que c'est beaucoup plus rapide. et j'ai envie d'essayer ça.
- Je me demande comment il peut être plus rapide..
- je pense que c'est parce que la case si une java.io.Le fichier est un répertoire ou pas, c'est très lent.
- et pourquoi pensez-vous que c'est le cas?
- par exemple ici: bugs.sun.com/bugdatabase/view_bug.do?bug_id=6483858 et ici: stackoverflow.com/questions/354703/...
- au moins le deuxième élément peut en effet être résolus à l'aide de
Path
: car il renvoie uneIterator
, il n'a pas besoin d'avoir résolu tous les membres de l'annuaire à la fois laiterator()
retours d'appel et peut donc "le ruisseau" le contenu du répertoire, qui s'aligne plus étroitement avec les Api natives sur la plupart des Systèmes d'exploitation.
Vous devez vous connecter pour publier un commentaire.
Utilisation
Fichiers.taille(Chemin)
pour obtenir la taille d'un fichier.De la taille d'un répertoire (ce qui est la taille de tous les fichiers qu'il contient), vous avez encore besoin de répéter manuellement, autant que je sache.
Path
est unIterable<Path>
, de sorte que vous pouvez juste fairefor (Path child : parent) { /* do stuff */ }
.Ici est un prêt à exécuter l'exemple qui va sauter-et-journal des répertoires, il ne peut pas entrer. Il utilise
java.util.de façon concomitante.atomique.AtomicLong
à accumuler de l'état.AtomicLong
est-elle nécessaire? Pourquoi ne pas simplement unelong
? Est-il quelque chose de parallèle sur walkFileTree ?postVisitDirectory
peut être également remplacée. Il n'est pas nécessaire de marquer lesize
de référence finale ici, car il n'est pas changé dans l'intérieur de la classe anonyme. Seulement son contenu (la valeur) est modifié. Un tableau (avec un seul élément) peut être utilisé à la place de AtomicLong.Ce serait de calculer la taille de tous les fichiers dans un répertoire. Toutefois, notez que tous les fichiers du répertoire doivent être régulières, fichiers, comme l'API spécifie la méthode de taille de BasicFileAttributes:
"La taille des fichiers qui ne sont pas des fichiers de la mise en œuvre est spécifique et, par conséquent, non spécifié."
Si vous tombez non réglementés fichier, vous ll ont à ne pas inclure de taille, ou de retourner une partie inconnue de taille. Vous pouvez vérifier si le fichier est régulière avec