Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mengulang Melalui Pokok Direktori di Jawa?

Bagaimanakah Saya Boleh Mengulang Melalui Pokok Direktori di Jawa?

Barbara Streisand
Barbara Streisandasal
2024-12-02 02:17:10660semak imbas

How Can I Iterate Through a Directory Tree in Java?

Menyala Melalui Pokok Direktori dalam Java

Salah satu tugas biasa apabila bekerja dengan direktori adalah untuk melelaran melalui semua fail dan direktori dalam direktori yang ditentukan. Ini termasuk subdirektori, menyediakan akses menyeluruh kepada keseluruhan pepohon direktori. Di Java, terdapat pendekatan standard untuk mencapai kefungsian ini.

File#isDirectory():

Kelas Fail dalam Java mempunyai kaedah yang dipanggil isDirectory() yang boleh digunakan untuk menentukan sama ada fail mewakili direktori atau fail. Jika fail yang diberikan ialah direktori, maka ia mengandungi senarai fail dan direktori, yang boleh diperoleh menggunakan kaedah listFiles().

Pendekatan Rekursif dengan Files#listFiles():

Pendekatan mudah untuk melelaran melalui pepohon direktori ialah menggunakan rekursi. Coretan berikut menunjukkan kaedah ini:

import java.io.File;

public class DirectoryIterator {

    public static void main(String[] args) {
        File directory = new File("/path/to/dir");
        showFiles(directory.listFiles());
    }

    public static void showFiles(File[] files) {
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("Directory: " + file.getAbsolutePath());
                showFiles(file.listFiles()); // Recursive call
            } else {
                System.out.println("File: " + file.getAbsolutePath());
            }
        }
    }
}

Pendekatan ini berfungsi dengan memanggil secara rekursif showFiles() pada senarai fail yang dikembalikan oleh listFiles(). Walau bagaimanapun, adalah penting untuk mengendalikan pengecualian StackOverflowError, yang boleh berlaku jika pepohon direktori terlalu dalam untuk timbunan JVM untuk dikendalikan.

Files#walk() untuk Tail Recursion:

Untuk Java 8 dan lebih baru, pendekatan yang lebih cekap ialah menggunakan Files#walk(). Kaedah ini melaksanakan rekursi ekor, yang mengelakkan isu StackOverflowError dengan mengekalkan keadaan lelaran dalam tindanan panggilan kaedah dan bukannya tindanan JVM.

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryIteratorWithJava8 {

    public static void main(String[] args) throws Exception {
        Path directory = Paths.get("/path/to/dir");
        Files.walk(directory).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());
        }
    }
}

Files#walk() menjana aliran objek Path yang mewakili fail dan direktori dalam pepohon direktori yang diberikan. Kaedah forEach() kemudiannya digunakan untuk memproses setiap objek Path dan memaparkan fail atau direktori yang sepadan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengulang Melalui Pokok Direktori di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn