Salin Direktori di Java

1. Perkenalan

Dalam tutorial singkat ini, kita akan melihat cara menyalin direktori di Java, termasuk semua file dan subdirektorinya. Ini dapat dicapai dengan menggunakan fitur-fitur inti Java atau pustaka pihak ketiga.

2. Menggunakan API java.nio

Java NIO telah tersedia sejak Java 1.4. Java 7 memperkenalkan NIO 2 yang membawa banyak fitur berguna seperti dukungan yang lebih baik untuk menangani tautan simbolik, akses atribut file. Ini juga memberi kami kelas seperti Path , Paths , dan Files yang membuat manipulasi sistem file jauh lebih mudah.

Mari kita 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 menjalankan pohon file yang di-root pada direktori sumber yang diberikan menggunakan Files.walk () dan memanggil Files.copy () untuk setiap file atau direktori yang kami temukan di direktori sumber.

3. Menggunakan API java.io

Java 7 adalah titik balik dari perspektif manajemen sistem file karena memperkenalkan banyak fitur praktis baru.

Namun, jika kita ingin tetap kompatibel dengan versi Java yang lebih lama, kita dapat menyalin direktori menggunakan fitur rekursi dan 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 kasus ini, kami akan membuat direktori di direktori tujuan untuk setiap direktori di pohon direktori sumber . Kemudian kita akan memanggil metode 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 file 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 memiliki banyak fitur berguna seperti kelas utilitas, filter file, dan pembanding file . Di sini kita akan menggunakan FileUtils yang menyediakan metode untuk manipulasi file dan direktori yang mudah, yaitu membaca, memindahkan, menyalin.

Mari tambahkan commons-io ke file pom.xml kita :

 commons-io commons-io 2.7 

Terakhir, 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 pada contoh sebelumnya, Apache Commons IO membuat semuanya lebih mudah, karena kita hanya perlu memanggil metode FileUtils.copyDirectory () .

5. Kesimpulan

Artikel ini mengilustrasikan cara menyalin direktori di Java. Contoh kode lengkap tersedia di GitHub.