Esiste qualche differenza di implementazione tra file.length()
e Files.size()
in Java? Java 7 ha introdotto il metodo Files.size()
.Implementazione Files.size() in Java 7
risposta
La classe java.nio.file.Files
in JDK 7 è una classe che fornisce metodi statici che operano sui file.
Il metodo Files.size(String path)
restituisce la dimensione del file in base allo java.nio.file.spi.FileSystemProvider
. Non ha nulla a che fare con File.length()
in quanto questo ti restituisce la dimensione effettiva del file che in realtà ha "connesso" a.
La differenza principale è che Files.size()
può gestire cose che non sono "file regolari" (come definito da Files.isRegularFile()
).
Questo significa che a seconda di quale FileSystemProviders
che avete a disposizione, potrebbe essere in grado di ottenere la dimensione di un file in un file ZIP, potrebbe essere in grado di gestire i file a cui si accede tramite FTP/SFTP, ...
Plain old File.length()
non può fare nulla di tutto ciò. It solo gestisce file "reali" (cioè quelli che il sistema operativo sottostante gestisce anche come file).
Una differenza importante è che Files.size()
getta un'IOException se qualcosa va storto, mentre File.length()
restituisce semplicemente 0. Vorrei quindi consiglia di utilizzare Files.size()
perché:
- Non è possibile distinguere tra un file vuoto e un errore si verificano con
File.length()
perché restituirà 0 in entrambi i casi. - Se si verifica un errore non si otterranno informazioni sulla causa dell'errore con
File.length()
. Al contrario, la IOException generata daFiles.size()
generalmente include un messaggio che indica la causa dell'errore.
Inoltre, come descritto in this answer, Files.size()
può funzionare con qualsiasi provider del file system (ad esempio per ZIP o file FTP sistemi) mentre File.length()
funziona solo con il "regolare" del file system a vista dal sistema operativo.
Conclusione: in generale, è preferibile utilizzare i metodi della nuova classe Files
rispetto alla classe legacy File
.
- 1. Implementazione BGN in Java
- 2. Implementazione RNT in java
- 3. implementazione diff in Java
- 4. java streams in Java 7
- 5. ClassValue in Java 7
- 6. Nashorn in Java 7
- 7. Implementazione di BFS in Java
- 8. Implementazione pattern osservabile in Java
- 9. Implementazione dell'API Kraken in Java
- 10. Implementazione dell'interfaccia Java in MATLAB
- 11. Invocazione concatenata in Java 7?
- 12. Compiler cambiamento in Java 7
- 13. Significato 0_0 in Java 7
- 14. Implementazione JAVA JNA WindowProc
- 15. Implementazione java albero segmento
- 16. IntervalTree DeleteNode Implementazione Java
- 17. Implementazione Java Thread.sleep()
- 18. REST RQL Implementazione Java
- 19. implementazione crc16 java
- 20. Implementazione R-Tree Java
- 21. libsvm implementazione Java
- 22. Implementazione HashCode dell'array Java
- 23. Java - Interfacce di implementazione
- 24. Tomcat6 e Java 7
- 25. Esegui Java EE 7 WebSockets in Tomcat 7
- 26. Java 7 - stringhe multilinea
- 27. Implementazione del modello singleton in Java
- 28. implementazione di un fornitore pigro in java
- 29. Implementazione del metodo equals in java
- 30. Implementazione di un interfaccia Java in Scala