¿Hay alguna diferencia de implementación entre file.length()
y Files.size()
en Java? Java 7 introdujo el método Files.size()
.Implementación Files.size() en Java 7
Respuesta
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.
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).
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 desdeFiles.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.
- 1. ClassValue en Java 7
- 2. JBoss AS 7 deshabilita implementación en caliente
- 3. Cierres en Java 7
- 4. Invocación encadenada en Java 7?
- 5. Cierre ResultSet en Java 7
- 6. implementación de diff en Java
- 7. Implementación de PCA en Java
- 8. Implementación de KDTree en Java
- 9. Tomcat6 y Java 7
- 10. Java 7 - líneas múltiples
- 11. Error en la implementación de WP 7 de Uri.IsWellFormedUriString?
- 12. Implementación de Java Primitive
- 13. Implementación JAVA JNA WindowProc
- 14. Implementación de archivos Java
- 15. ¿Java 7 incluye una implementación de JAX-WS o solo la API?
- 16. Compilación de Java 7 a Java 6
- 17. Java 7 64 bit en Windows 7: cómo cambiar las versiones java
- 18. ¿Probar con recursos en Java 7?
- 19. Verificación de certificados PKCS # 7 en Java
- 20. Ruta de Java 7 en mac osx
- 21. Programación de Java 7 en Eclipse
- 22. Java 7 "optimización" de clasificación
- 23. cambio compilador de Java 7
- 24. IntelliJ, Maven y Java 7
- 25. Eclipse 3.5 y Java 7
- 26. Java 7 fecha/hora API
- 27. Binario Java 7 para Mac
- 28. setDragImage no funciona - Java 7
- 29. ProGuard + Maven con Java 7
- 30. Maven no utiliza Java 7