Másoljon egy könyvtárat Java-ban

1. Bemutatkozás

Ebben a rövid bemutatóban megtudhatjuk, hogyan kell másolni egy könyvtárat a Java-ban, beleértve az összes fájlt és alkönyvtárat. Ez elérhető a Java alapvető szolgáltatásainak vagy harmadik féltől származó könyvtárak használatával.

2. A java.nio API

Jáva NIO Java 1.4 óta elérhető. Bemutatták a Java 7-et NIO 2 sok hasznos funkciót hozott, mint például a szimbolikus linkek kezelésének jobb támogatását, a fájlattribútumokhoz való hozzáférést. Ez olyan osztályokat is biztosított számunkra, mint pl Pálya, Útvonalak, és Fájlok ez sokkal könnyebbé tette a fájlrendszer manipulálását.

Bemutassuk ezt a megközelítést:

public static void copyDirectory (String sourceDirectoryLocation, String destinationDirectoryLocation) dobja az IOException {Files.walk (Paths.get (sourceDirectoryLocation)) .forEach (source -> {Path destination = Paths.get (destinationDirectoryLocation, source.toString () .substring () .length ())); próbálkozzon a {Files.copy (forrás, cél);} catch (IOException e) {e.printStackTrace ();}}); }

Ebben a példában az adott forráskönyvtárban gyökerező fájlt használva Files.walk () és megidézte Files.copy () minden fájlhoz vagy könyvtárhoz a forrás könyvtárban találtuk.

3. A java.io API

A Java 7 fordulópont volt a fájlrendszer-kezelés szempontjából, mivel rengeteg új, praktikus funkciót vezetett be.

Ha azonban kompatibilisek akarunk maradni a régebbi Java verziókkal, akkor másolhatunk egy könyvtárat rekurzió és java.io.Fájl jellemzők:

private static void copyDirectory (File sourceDirectory, File destinationDirectory) az IOException-t dobja {if (! destinationDirectory.exists ()) {destinationDirectory.mkdir (); } for (String f: sourceDirectory.list ()) {copyDirectoryCompatibityMode (new File (sourceDirectory, f), new File (destinationDirectory, f)); }}

Ebben az esetben, létrehozunk egy könyvtárat a célkönyvtárban a forrás könyvtárfa minden könyvtárához. Akkor meghívjuk a copyDirectoryCompatibityMode () módszer:

public static void copyDirectoryCompatibityMode (File source, File destination) dobja az IOException-t {if (source.isDirectory ()) {copyDirectory (forrás, cél); } else {copyFile (forrás, cél); }} 

Is, nézzük meg, hogyan másolhatunk egy fájlt FileInputStream és FileOutputStream:

private static void copyFile (File sourceFile, File destinationFile) dobja az IOException {try (InputStream in = new FileInputStream (sourceFile); OutputStream out = new FileOutputStream (destinationFile)) {byte [] buf = new byte [1024]; int hossza; while ((hossz = beolvasott (buf))> 0) {out.write (buf, 0, hossz); }}} 

4. Az Apache Commons IO használata

Az Apache Commons IO sok hasznos funkcióval rendelkezik, mint például segédprogramosztályok, fájlszűrők és fájlösszehasonlítók. Itt fogjuk használni FileUtils amelyek biztosítják a fájl- és könyvtárkezelés egyszerű kezelését, azaz az olvasást, az áthelyezést, a másolást.

Tegyük fel a commons-io-t a mi pom.xml fájl:

 commons-io commons-io 2.7 

Végül másoljunk egy könyvtárat ezzel a megközelítéssel:

public static void copyDirectory (String sourceDirectoryLocation, String destinationDirectoryLocation) dobja az IOException {File sourceDirectory = új File (sourceDirectoryLocation); File destinationDirectory = új fájl (destinationDirectoryLocation); FileUtils.copyDirectory (sourceDirectory, destinationDirectory); }

Amint az előző példában is látható, az Apache Commons IO mindezt sokkal könnyebbé teszi, hiszen csak hívnunk kell FileUtils.copyDirectory () módszer.

5. Következtetés

Ez a cikk bemutatta, hogyan kell másolni egy könyvtárat a Java-ban. A teljes kódminták elérhetők a GitHubon.