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.