nio - txt - metodo file en java
Obtener tamaƱo de archivo/directorio con Java 7 nuevo IO (3)
Aquí hay un ejemplo listo para ejecutar que también omitirá y registrará 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();
}
¿Cómo puedo obtener el tamaño de un archivo o directorio usando el nuevo NIO en java 7?
Use 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 recurse 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 está especificado".
Si se topa con un archivo no regulado, tendrá que no incluirlo, o devolver un tamaño desconocido. Puede verificar si el archivo es regular con
BasicFileAttributes.isRegularFile()