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.