2015-08-21 10 views
13

Durante la scrittura di risposte intorno a SO, un utente ha provato a segnalare che java.io.File non deve essere utilizzato nel nuovo codice, invece sostiene che si dovrebbe utilizzare il nuovo oggetto java.nio.Files; ha collegato a this article.java.io.File vs java.nio.Files che è il preferito nel nuovo codice?

Ora mi sto sviluppando in Java da diversi anni e non ho mai sentito questo argomento prima; da quando ho letto il suo post ho cercato e non ho trovato molte altre fonti che lo confermino, e personalmente, mi sento come se molti dei punti discussi nell'articolo fossero deboli e che se sapessi come leggerli, gli errori lanciati dal La classe generalmente ti dirà esattamente qual è il problema.

Come sto in continuo sviluppo nuovo codice mia domanda è questa:

È questo un argomento attivo nella comunità Java? Files preferito su File per il nuovo codice? Quali sono i principali vantaggi/svantaggi tra i due?

+0

Una buona ragione è l'utilizzo di flussi per operazioni sui file, ad esempio: lettura di un elenco di file come flusso piuttosto che come un arraylist – Umesh

risposta

11

Il documentation che si è collegato dare la risposta:

Il pacchetto java.nio.file definisce le interfacce e classi per la macchina virtuale Java per accedere ai file, attributi di file e file system. Questa API può essere utilizzata per superare molte delle limitazioni della classe java.io.File . Il metodo toPath può essere utilizzato per ottenere un percorso che utilizza il percorso astratto rappresentato da un oggetto File per individuare un file . Il Percorso risultante può essere utilizzato con la classe File per fornire un accesso più efficiente ed esteso alle operazioni aggiuntive dei file, agli attributi del file e alle eccezioni I/O per aiutare a diagnosticare errori quando l'operazione non riesce su un file.

5

File ha un'implementazione più recente: Path. Con un costruttore Paths.get("..."). E Files ha molte funzioni di utilità con implementazioni migliori (move invece che a volte non riesce a File.renameTo).

A Path mantiene il proprio file system. Quindi è possibile copiare da un file system zip ("jar: file: ..... .zip") un percorso verso un altro file system e viceversa.

File.toPath() può aiutare una transizione incrementale.

Le utilità da solo in Files rendono redditizio lo spostamento verso le classi più recenti.

1

Direi che nessuno dei due è "preferito". Invece, ti consiglio di esaminare le funzionalità richieste dalla tua applicazione e di utilizzare quella di java.io.File o java.nio.Files per soddisfare meglio i requisiti.

La risposta è probabile che sia un pareggio, o java.nio.Files è migliore. Ma spetta a te o alla tua squadra decidere, non qualche altro programmatore su SO.