Salin Direktori di Java

1. Pengenalan

Dalam tutorial ringkas ini, kita akan melihat cara menyalin direktori di Java, termasuk semua fail dan subdirektorinya. Ini dapat dicapai dengan menggunakan fitur Java inti atau perpustakaan pihak ketiga.

2. Menggunakan API java.nio

Java NIO telah tersedia sejak Java 1.4. Java 7 memperkenalkan NIO 2 yang membawa banyak ciri berguna seperti sokongan yang lebih baik untuk mengendalikan pautan simbolik, akses atribut fail. Ini juga memberi kami kelas seperti Path , Paths , dan Files yang menjadikan manipulasi sistem fail menjadi lebih mudah.

Mari tunjukkan pendekatan ini:

public static void copyDirectory(String sourceDirectoryLocation, String destinationDirectoryLocation) throws IOException { Files.walk(Paths.get(sourceDirectoryLocation)) .forEach(source -> { Path destination = Paths.get(destinationDirectoryLocation, source.toString() .substring(sourceDirectoryLocation.length())); try { Files.copy(source, destination); } catch (IOException e) { e.printStackTrace(); } }); }

Dalam contoh ini, kami berjalan di pohon file yang di-root pada direktori sumber yang diberikan menggunakan Files.walk () dan memanggil Files.copy () untuk setiap fail atau direktori yang kami dapati di direktori sumber.

3. Menggunakan API java.io

Java 7 adalah titik balik dari perspektif pengurusan sistem fail kerana memperkenalkan banyak fitur berguna baru.

Namun, jika kita ingin tetap serasi dengan versi Java yang lebih lama, kita dapat menyalin direktori menggunakan rekursi dan ciri java.io.File :

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

Dalam hal ini, kami akan membuat direktori di direktori tujuan untuk setiap direktori di pohon direktori sumber . Kemudian kami akan menggunakan kaedah copyDirectoryCompatibityMode () :

public static void copyDirectoryCompatibityMode(File source, File destination) throws IOException { if (source.isDirectory()) { copyDirectory(source, destination); } else { copyFile(source, destination); } } 

Juga, mari kita lihat cara menyalin fail menggunakan FileInputStream dan 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 length; while ((length = in.read(buf)) > 0) { out.write(buf, 0, length); } } } 

4. Menggunakan Apache Commons IO

Apache Commons IO mempunyai banyak ciri berguna seperti kelas utiliti, penapis fail, dan pembanding fail . Di sini kita akan menggunakan FileUtils yang menyediakan kaedah untuk manipulasi fail dan direktori yang mudah, seperti membaca, bergerak, menyalin.

Mari tambahkan commons-io ke fail pom.xml kami :

 commons-io commons-io 2.7 

Akhirnya, mari salin direktori menggunakan pendekatan ini:

public static void copyDirectory(String sourceDirectoryLocation, String destinationDirectoryLocation) throws IOException { File sourceDirectory = new File(sourceDirectoryLocation); File destinationDirectory = new File(destinationDirectoryLocation); FileUtils.copyDirectory(sourceDirectory, destinationDirectory); }

Seperti yang ditunjukkan dalam contoh sebelumnya, Apache Commons IO menjadikan semuanya lebih mudah, kerana kita hanya perlu memanggil kaedah FileUtils.copyDirectory () .

5. Kesimpulan

Artikel ini menggambarkan cara menyalin direktori di Java. Contoh kod lengkap boleh didapati di GitHub.