Kopieren Sie ein Verzeichnis in Java

1. Einleitung

In diesem kurzen Tutorial erfahren Sie, wie Sie ein Verzeichnis in Java kopieren, einschließlich aller seiner Dateien und Unterverzeichnisse. Dies kann durch die Verwendung von Java-Kernfunktionen oder Bibliotheken von Drittanbietern erreicht werden.

2. Verwenden der java.nio- API

Java NIO ist seit Java 1.4 verfügbar. In Java 7 wurde NIO 2 eingeführt , das viele nützliche Funktionen wie eine bessere Unterstützung für den Umgang mit symbolischen Links und den Zugriff auf Dateiattribute bietet. Außerdem wurden Klassen wie Pfad , Pfade und Dateien bereitgestellt, die die Manipulation des Dateisystems erheblich vereinfachten.

Lassen Sie uns diesen Ansatz demonstrieren:

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 diesem Beispiel haben wir den im angegebenen Quellverzeichnis verwurzelten Dateibaum mit Files.walk () durchsucht und Files.copy () für jede Datei oder jedes Verzeichnis aufgerufen, die wir im Quellverzeichnis gefunden haben.

3. Verwenden der java.io- API

Java 7 war aus Sicht der Dateisystemverwaltung ein Wendepunkt, da es viele neue nützliche Funktionen einführte.

Wenn wir jedoch mit älteren Java-Versionen kompatibel bleiben möchten, können wir ein Verzeichnis mithilfe der Funktionen rekursion und java.io.File kopieren :

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 diesem Fall erstellen wir für jedes Verzeichnis im Quellverzeichnisbaum ein Verzeichnis im Zielverzeichnis . Dann rufen wir die copyDirectoryCompatibityMode () -Methode auf:

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

Außerdem wollen wir mal sehen , wie eine Datei mit kopieren Fileinputstream und Outputstream :

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. Verwenden von Apache Commons IO

Apache Commons IO bietet viele nützliche Funktionen wie Dienstprogrammklassen, Dateifilter und Dateikomparatoren . Hier verwenden wir FileUtils , die Methoden zur einfachen Bearbeitung von Dateien und Verzeichnissen bereitstellen, dh zum Lesen, Verschieben und Kopieren.

Fügen wir unserer Datei pom.xml commons-io hinzu :

 commons-io commons-io 2.7 

Zum Schluss kopieren wir ein Verzeichnis mit diesem Ansatz:

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

Wie im vorherigen Beispiel gezeigt, macht Apache Commons IO alles viel einfacher, da wir nur die FileUtils.copyDirectory () -Methode aufrufen müssen .

5. Schlussfolgerung

Dieser Artikel zeigt, wie ein Verzeichnis in Java kopiert wird. Komplette Codebeispiele sind auf GitHub verfügbar.