Kopirajte direktorij na Javi

1. Uvod

U ovom kratkom vodiču vidjet ćemo kako kopirati direktorij na Javi, uključujući sve njegove datoteke i poddirektorijume. To se može postići korištenjem osnovnih Java značajki ili neovisnih knjižnica.

2. Korištenje java.nio API

Java NIO dostupan je od Jave 1.4. Uvedena Java 7 NIO 2 koji je donio puno korisnih značajki poput bolje podrške za rukovanje simboličkim vezama, pristup atributima datoteka. Također nam je omogućio nastavu poput Staza, Staze, i Datoteke to je znatno olakšalo manipulaciju datotečnim sustavom.

Pokažimo ovaj pristup:

javna statička void copyDirectory (String sourceDirectoryLocation, String destinationDirectoryLocation) baca IOException {Files.walk (Paths.get (sourceDirectoryLocation)) .forEach (source -> {Path destination = Paths.get (destinationDirectoryLocation, source.toString (source .substringling .length ())); try {Files.copy (izvor, odredište);} catch (IOException e) {e.printStackTrace ();}}); }

U ovom primjeru, hodali smo po stablu datoteka ukorijenjenom u zadanom izvornom direktoriju koristeći Files.walk () i zazivali Files.copy () za svaku datoteku ili direktorij pronašli smo u izvornom direktoriju.

3. Korištenje java.io API

Java 7 bila je prekretnica iz perspektive upravljanja datotečnim sustavom jer je uvela puno novih korisnih značajki.

Međutim, ako želimo ostati kompatibilni sa starijim verzijama Jave, možemo kopirati direktorij pomoću rekurzije i java.io.Datoteka značajke:

private static void copyDirectory (FileDirectory, File destinationDirectory) baca IOException {if (! destinationDirectory.exists ()) {destinationDirectory.mkdir (); } za (Niz f: sourceDirectory.list ()) {copyDirectoryCompatibityMode (nova datoteka (sourceDirectory, f), nova datoteka (odredišteDirectory, f)); }}

U ovom slučaju, stvorit ćemo direktorij u odredišnom direktoriju za svaki direktorij u izvornom stablu direktorija. Tada ćemo se pozvati na copyDirectoryCompatibityMode () metoda:

javna statička void copyDirectoryCompatibityMode (izvor datoteke, odredište datoteke) baca IOException {if (source.isDirectory ()) {copyDirectory (izvor, odredište); } else {copyFile (izvor, odredište); }} 

Također, pogledajmo kako kopirati datoteku pomoću FileInputStream i FileOutputStream:

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

4. Korištenje Apache Commons IO

Apache Commons IO ima puno korisnih značajki poput klasa uslužnih programa, filtara datoteka i komparatora datoteka. Ovdje ćemo koristiti FileUtils koji pružaju metode za lako rukovanje datotekama i direktorijima, tj. čitanje, premještanje, kopiranje.

Dodajmo commons-io na naš pom.xml datoteka:

 commons-io commons-io 2.7 

Na kraju, kopirajmo direktorij koristeći ovaj pristup:

javna statička void copyDirectory (String sourceDirectoryLocation, String destinationDirectoryLocation) baca IOException {File sourceDirectory = nova datoteka (sourceDirectoryLocation); Datoteka destinationDirectory = nova datoteka (destinationDirectoryLocation); FileUtils.copyDirectory (sourceDirectory, destinationDirectory); }

Kao što je prikazano u prethodnom primjeru, Apache Commons IO sve to puno olakšava, budući da trebamo samo nazvati FileUtils.copyDirectory () metoda.

5. Zaključak

Ovaj je članak ilustrirao kako kopirati direktorij na Javi. Cjeloviti uzorci koda dostupni su na GitHubu.


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