Kopieer een directory in Java

1. Inleiding

In deze korte tutorial zullen we zien hoe je een map in Java kopieert, inclusief al zijn bestanden en submappen. Dit kan worden bereikt door Java-kernfuncties of bibliotheken van derden te gebruiken.

2. Gebruik de java.nio API

Java NIO is beschikbaar sinds Java 1.4. Java 7 geïntroduceerd NIO 2 dat bracht veel handige functies met zich mee, zoals betere ondersteuning voor het omgaan met symbolische koppelingen, toegang tot bestandskenmerken. Het voorzag ons ook van lessen zoals Pad, Paden, en Bestanden dat maakte het manipuleren van bestandssystemen veel gemakkelijker.

Laten we deze benadering demonstreren:

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

In dit voorbeeld we liepen door de bestandsstructuur die was geworteld in de opgegeven brondirectory met Files.walk () en ingeroepen Files.copy () voor elk bestand of elke directory we vonden in de bronmap.

3. Gebruik de java.io API

Java 7 was een keerpunt vanuit het perspectief van bestandssysteembeheer, omdat het veel nieuwe handige functies introduceerde.

Als we echter compatibel willen blijven met oudere Java-versies, kunnen we een map kopiëren met behulp van recursie en java.io.File Kenmerken:

private static void copyDirectory (File sourceDirectory, File destinationDirectory) gooit IOException {if (! destinationDirectory.exists ()) {destinationDirectory.mkdir (); } voor (String f: sourceDirectory.list ()) {copyDirectoryCompatibityMode (nieuw bestand (sourceDirectory, f), nieuw bestand (destinationDirectory, f)); }}

In dit geval, we maken een directory in de bestemmingsdirectory voor elke directory in de source directory-structuur. Dan zullen we de copyDirectoryCompatibityMode () methode:

openbare statische ongeldige copyDirectoryCompatibityMode (bestandsbron, bestandsbestemming) gooit IOException {if (source.isDirectory ()) {copyDirectory (bron, bestemming); } else {copyFile (bron, bestemming); }} 

Ook, laten we eens kijken hoe we een bestand kunnen kopiëren met FileInputStream en FileOutputStream:

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

4. Apache Commons IO gebruiken

Apache Commons IO heeft veel handige functies, zoals hulpprogramma-klassen, bestandsfilters en bestandsvergelijkers. Hier zullen we gebruiken FileUtils die methoden bieden voor gemakkelijke bestands- en directorymanipulatie, d.w.z. lezen, verplaatsen, kopiëren.

Laten we commons-io toevoegen aan onze pom.xml het dossier:

 commons-io commons-io 2.7 

Laten we tot slot een map kopiëren met behulp van deze benadering:

openbare statische ongeldige copyDirectory (String sourceDirectoryLocation, String destinationDirectoryLocation) gooit IOException {File sourceDirectory = new File (sourceDirectoryLocation); Bestand destinationDirectory = nieuw bestand (destinationDirectoryLocation); FileUtils.copyDirectory (sourceDirectory, destinationDirectory); }

Zoals getoond in het vorige voorbeeld, maakt Apache Commons IO het allemaal veel gemakkelijker, aangezien we hoeven alleen maar te bellen FileUtils.copyDirectory () methode.

5. Conclusie

Dit artikel illustreert hoe u een directory in Java kopieert. Volledige codevoorbeelden zijn beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found