¿Cómo puedo obtener el tamaño de un archivo o directorio utilizando el nuevo NIO en java 7?Obtener tamaño de archivo/directorio con Java 7 nuevo IO
Respuesta
Usa Files.size(Path)
para obtener el tamaño de un archivo.
Para el tamaño de un directorio (es decir, el tamaño de todos los archivos que contiene), aún necesita volver a generar manualmente, hasta donde yo sé.
MutableLong size = new MutableLong();
Files.walkFileTree(directoryPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
size.add(attrs.size());
}
}
Esto calcularía el tamaño de todos los archivos en un directorio. Sin embargo, tenga en cuenta que todos los archivos en el directorio deben ser archivos regulares, ya que API especifica el método de tamaño de BasicFileAttributes:
"El tamaño de los archivos que no son archivos regulares es específico de la implementación y por lo tanto no especificado."
Si se topa con un archivo no regulado, tendrá que no incluirlo en tamaño o devolver un tamaño desconocido. Puede verificar si el archivo es regular con
BasicFileAttributes.isRegularFile()
Buena respuesta, y para cualquiera que se pregunte si las clases Mutable * para primitivos son parte de apache.commons.lang – Nicholi
Aquí hay un ejemplo listo para ejecutar que también omitirá los directorios que no puede ingresar. Utiliza java.util.concurrent.atomic.AtomicLong
para acumular estado.
public static void main(String[] args) throws IOException {
Path path = Paths.get("c:/");
long size = getSize(path);
System.out.println("size=" + size);
}
static long getSize(Path startPath) throws IOException {
final AtomicLong size = new AtomicLong(0);
Files.walkFileTree(startPath, 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();
}
¿Se pregunta por qué es necesario 'AtomicLong'? ¿Por qué no solo un "largo"? ¿Hay algo en paralelo sobre [walkFileTree] (http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#walkFileTree%28java.nio.file.Path,%20java. util.Set,% 20int,% 20java.nio.file.FileVisitor% 29)? – peterh
tbh, simplemente reescribí la otra respuesta sin usar 3pp (MutableLong). Pero creo que la variable tiene que ser "definitiva" para acceder desde la clase anónima interna. Que AtomicLong permite. –
El método 'postVisitDirectory' también puede ser anulado. No es necesario marcar la referencia 'size' como final aquí porque no se cambia en la clase anónima interna. Solo se cambia su contenido (valor). Se puede usar una matriz larga (con un solo elemento) en lugar de AtomicLong. – Stephan
- 1. Java 7 nueva API de IO - Paths.exists
- 2. Java IO Performance XOR con 2 archivos
- 3. ¿Cómo obtener IBM Java 7 para Windows?
- 4. IO asincrónico en Java?
- 5. ¿Cómo obtener un nuevo puntero en Java?
- 6. Crear nuevo archivo con tamaño específico
- 7. idiomático IO con Scala
- 8. UIScrollView no obtener un nuevo tamaño en la orientación cambiar
- 9. ProGuard + Maven con Java 7
- 10. ¿Cómo obtener tamaño de Ram y tamaño de disco duro con Java?
- 11. Compilación de Java 7 a Java 6
- 12. Java obtener color y tamaño del borde
- 13. ¿Tomcat 7 ahora es compatible con Java 7?
- 14. ClassValue en Java 7
- 15. Cierres en Java 7
- 16. obtener tamaño de nswindow
- 17. ¿Probar con recursos en Java 7?
- 18. Java: comodines de nuevo
- 19. Haskell arroyos con efectos IO
- 20. ¿Es Java 7 WatchService lento para cualquiera?
- 21. java obtener el tamaño de archivo de manera eficiente
- 22. Binario Java 7 para Mac
- 23. Tomcat6 y Java 7
- 24. En Java, ¿lo nuevo siempre es nuevo?
- 25. Combinar Estado con acciones IO
- 26. Obtener el tamaño de bloque del sistema en Java
- 27. Cómo obtener el tamaño de una clave RSA en Java
- 28. Obtener el tamaño de la memoria del sistema operativo Java
- 29. cambio compilador de Java 7
- 30. Nuevo programador Java, composición básica de Java
¿Qué pasa con la forma antigua? A menos que haya compatibilidad para el tamaño de directorio recursivo ahora. ¿Esta ahí? – Thilo
he oído que es mucho más rápido. y quiero probar eso. – clamp
Tengo que preguntarme cómo puede ser más rápido ... – Thilo