2011-08-29 21 views

Respuesta

5

La clase java.nio.file.Files en JDK 7 es una clase que proporciona métodos estáticos que operan en archivos. El método Files.size(String path) devuelve el tamaño de archivo basado en java.nio.file.spi.FileSystemProvider. No tiene nada que ver con File.length() ya que esto le devuelve el tamaño real del archivo que realmente se "conectó" a.

17

La principal diferencia es que Files.size() puede manejar cosas que no son "archivos regulares" (como se define en Files.isRegularFile()).

Esto significa que dependiendo de qué FileSystemProviders que tiene disponible, podría ser capaz de obtener el tamaño de un archivo en un archivo ZIP, podría ser capaz de manejar archivos accedidos a través de FTP/SFTP, ...

simple viejo File.length() no puede hacer nada de eso. Es solo maneja los archivos "reales" (es decir, los que el sistema operativo subyacente maneja también como archivos).

1

Una diferencia importante es que Files.size() lanza una IOException si algo va mal, mientras que File.length() simplemente devuelve 0. Por lo tanto recomendaría el uso de Files.size() porque:

  • No es posible diferenciar entre un archivo vacío y un error que ocurre con File.length() porque devolverá 0 en ambos casos.
  • Si se produce un error, no obtendrá información sobre la causa del error con File.length(). Por el contrario, la IOException lanzada desde Files.size() generalmente incluirá un mensaje que indica la causa de la falla.

Además, como se describe en this answer, Files.size() puede trabajar con cualquier proveedor de sistema de archivos (por ejemplo, para los sistemas de archivo ZIP o FTP), mientras que File.length() sólo funciona con el sistema de archivos "regular" expuesta por su sistema operativo.

Conclusión: en general, prefiera los métodos de la clase Files más nueva que la clase File heredada.