Copia una directory in Java

1. Introduzione

In questo breve tutorial vedremo come copiare una directory in Java, inclusi tutti i suoi file e sottodirectory. Ciò può essere ottenuto utilizzando le funzionalità principali di Java o le librerie di terze parti.

2. Utilizzo dell'API java.nio

Java NIO è disponibile da Java 1.4. Java 7 ha introdotto NIO 2 che ha portato molte funzioni utili come un migliore supporto per la gestione dei collegamenti simbolici, l'accesso agli attributi dei file. Ci ha anche fornito classi come Path , Paths e Files che hanno reso la manipolazione del file system molto più semplice.

Dimostriamo questo approccio:

public static void copyDirectory(String sourceDirectoryLocation, String destinationDirectoryLocation) throws IOException { Files.walk(Paths.get(sourceDirectoryLocation)) .forEach(source -> { Path destination = Paths.get(destinationDirectoryLocation, source.toString() .substring(sourceDirectoryLocation.length())); try { Files.copy(source, destination); } catch (IOException e) { e.printStackTrace(); } }); }

In questo esempio, abbiamo esplorato l'albero dei file radicato nella directory di origine specificata utilizzando Files.walk () e abbiamo richiamato Files.copy () per ogni file o directory che abbiamo trovato nella directory di origine.

3. Utilizzo dell'API java.io

Java 7 è stato un punto di svolta dal punto di vista della gestione del file system poiché ha introdotto molte nuove funzionalità utili.

Tuttavia, se vogliamo rimanere compatibili con le versioni precedenti di Java, possiamo copiare una directory utilizzando la ricorsione e le funzionalità java.io.File :

private static void copyDirectory(File sourceDirectory, File destinationDirectory) throws IOException { if (!destinationDirectory.exists()) { destinationDirectory.mkdir(); } for (String f : sourceDirectory.list()) { copyDirectoryCompatibityMode(new File(sourceDirectory, f), new File(destinationDirectory, f)); } }

In questo caso, creeremo una directory nella directory di destinazione per ogni directory nella struttura della directory di origine . Quindi invocheremo il metodo copyDirectoryCompatibityMode () :

public static void copyDirectoryCompatibityMode(File source, File destination) throws IOException { if (source.isDirectory()) { copyDirectory(source, destination); } else { copyFile(source, destination); } } 

Inoltre, vediamo come copiare un file utilizzando FileInputStream e FileOutputStream :

private static void copyFile(File sourceFile, File destinationFile) throws IOException { try (InputStream in = new FileInputStream(sourceFile); OutputStream out = new FileOutputStream(destinationFile)) { byte[] buf = new byte[1024]; int length; while ((length = in.read(buf)) > 0) { out.write(buf, 0, length); } } } 

4. Utilizzo di Apache Commons IO

Apache Commons IO ha molte funzioni utili come classi di utilità, filtri di file e comparatori di file . Qui useremo FileUtils che forniscono metodi per una facile manipolazione di file e directory, cioè lettura, spostamento, copia.

Aggiungiamo commons-io al nostro file pom.xml :

 commons-io commons-io 2.7 

Infine, copiamo una directory utilizzando questo approccio:

public static void copyDirectory(String sourceDirectoryLocation, String destinationDirectoryLocation) throws IOException { File sourceDirectory = new File(sourceDirectoryLocation); File destinationDirectory = new File(destinationDirectoryLocation); FileUtils.copyDirectory(sourceDirectory, destinationDirectory); }

Come mostrato nell'esempio precedente, Apache Commons IO rende tutto molto più semplice, poiché dobbiamo solo chiamare il metodo FileUtils.copyDirectory () .

5. conclusione

Questo articolo ha illustrato come copiare una directory in Java. Esempi di codice completi sono disponibili su GitHub.