Skopírujte adresár v Jave

1. Úvod

V tomto krátkom návode sa dozvieme, ako skopírovať adresár v Jave vrátane všetkých jeho súborov a podadresárov. To sa dá dosiahnuť použitím základných funkcií Java alebo knižníc tretích strán.

2. Pomocou java.nio API

Java NIO je k dispozícii od verzie Java 1.4. Bola predstavená Java 7 NIO 2 ktorá priniesla veľa užitočných funkcií, ako je lepšia podpora pri manipulácii so symbolickými odkazmi, prístup k atribútom súborov. Poskytlo nám to aj triedy ako napr Cesta, Cestya Súbory vďaka čomu bola manipulácia so súborovým systémom oveľa jednoduchšia.

Ukážme tento prístup:

public static void copyDirectory (String sourceDirectoryLocation, String destinationDirectoryLocation) hodí IOException {Files.walk (Paths.get (sourceDirectoryLocation)) .forEach (source -> {Path destination = Paths.get (destinationDirectoryLocation, source.toString () .substring (sourceDirectoryLocation) .length ())); vyskúšajte {Files.copy (zdroj, cieľ);} catch (IOException e) {e.printStackTrace ();}}); }

V tomto príklade prechádzali sme stromom súborov zakoreneným v danom zdrojovom adresári pomocou Files.walk () a vyvolal Files.copy () pre každý súbor alebo adresár sme našli v zdrojovom adresári.

3. Pomocou java.io API

Java 7 bola zlomovým bodom z pohľadu správy súborového systému, pretože predstavila množstvo nových užitočných funkcií.

Ak však chceme zostať kompatibilný so staršími verziami Java, môžeme skopírovať adresár pomocou rekurzie a java.io.Súbor Vlastnosti:

private static void copyDirectory (File sourceDirectory, File destinationDirectory) hodí IOException {if (! destinationDirectory.exists ()) {destinationDirectory.mkdir (); } pre (Reťazec f: sourceDirectory.list ()) {copyDirectoryCompatibityMode (nový súbor (sourceDirectory, f), nový súbor (destinationDirectory, f)); }}

V tomto prípade, vytvoríme adresár v cieľovom adresári pre každý adresár v strome zdrojových adresárov. Potom vyvoláme copyDirectoryCompatibityMode () metóda:

public static void copyDirectoryCompatibityMode (zdroj súboru, cieľ súboru) hodí IOException {if (source.isDirectory ()) {copyDirectory (zdroj, cieľ); } else {copyFile (zdroj, cieľ); }} 

Tiež pozrime sa, ako skopírovať súbor pomocou FileInputStream a 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 dĺžka; while ((length = in.read (buf))> 0) {out.write (buf, 0, length); }}} 

4. Používanie Apache Commons IO

Apache Commons IO má veľa užitočných funkcií, ako sú triedy nástrojov, filtre súborov a komparátory súborov. Tu budeme používať FileUtils ktoré poskytujú metódy na ľahkú manipuláciu so súbormi a adresármi, t. j. čítanie, presúvanie, kopírovanie.

Pridajme k našej Commons-io pom.xml spis:

 commons-io commons-io 2.7 

Nakoniec skopírujme adresár pomocou tohto prístupu:

public static void copyDirectory (String sourceDirectoryLocation, String destinationDirectoryLocation) hodí IOException {File sourceDirectory = nový súbor (sourceDirectoryLocation); Súbor destinationDirectory = nový súbor (destinationDirectoryLocation); FileUtils.copyDirectory (sourceDirectory, destinationDirectory); }

Ako je uvedené v predchádzajúcom príklade, program Apache Commons IO to všetko oveľa uľahčuje nám stačí zavolať FileUtils.copyDirectory () metóda.

5. Záver

Tento článok ilustroval, ako kopírovať adresár v prostredí Java. Kompletné ukážky kódu sú k dispozícii na GitHub.


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