2011-08-29 18 views

risposta

5

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.

17

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).

1

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 da Files.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.