Lelaran Melalui Subdirektori Direktori Fail dalam Java
Apabila bekerja dengan fail dalam Java, selalunya perlu untuk mengakses bukan sahaja fail dalam direktori tetapi juga dalam subdirektorinya. Ini menimbulkan persoalan: bagaimanakah kita boleh menavigasi dengan cekap melalui direktori dan subdirektorinya dalam Java?
Rekursi: Pendekatan Standard
Teknik standard untuk lelaran direktori melibatkan penggunaan rekursi. Dengan menguji sama ada fail yang diberikan ialah direktori menggunakan kaedah File#isDirectory(), anda secara rekursif memanggil kaedah yang sama dengan hasil File#listFiles()nya.
Coretan kod berikut menunjukkan pendekatan rekursif ini:
import java.io.File; public class Demo { public static void main(String... args) { File dir = new File("/path/to/dir"); showFiles(dir.listFiles()); } public static void showFiles(File[] files) { for (File file : files) { if (file.isDirectory()) { System.out.println("Directory: " + file.getAbsolutePath()); showFiles(file.listFiles()); // Calls same method again. } else { System.out.println("File: " + file.getAbsolutePath()); } } } }
Alternatif Java 8: Rekursi Ekor dengan Files#walk()
Untuk Java 8 dan versi yang lebih baru, kaedah Files#walk() menyediakan alternatif kepada rekursi. Ia menggunakan rekursi ekor, mengelakkan risiko StackOverflowError dalam situasi dengan pepohon direktori dalam.
Begini cara menggunakan Files#walk() untuk lelaran direktori:
import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class DemoWithJava8 { public static void main(String... args) throws Exception { Path dir = Paths.get("/path/to/dir"); Files.walk(dir).forEach(path -> showFile(path.toFile())); } public static void showFile(File file) { if (file.isDirectory()) { System.out.println("Directory: " + file.getAbsolutePath()); } else { System.out.println("File: " + file.getAbsolutePath()); } } }
Kesimpulan
Dengan memanfaatkan rekursi dengan File#isDirectory() dan File#listFiles() atau dengan menggunakan Files#walk() dalam Java 8 , anda boleh mengulangi dengan berkesan melalui kedua-dua fail direktori dan fail subdirektori dalam aplikasi Java.
Atas ialah kandungan terperinci Bagaimana untuk Melintasi Direktori Fail dan Subdirektorinya dengan Cekap di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!