Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ดึงเฉพาะ Directories จาก Folder ใน Java

วิธีที่ 1: FileFilter + listFiles() (Legacy IO)

import java.io.*;

public class MyExample {
    public static void main(String args[]) throws IOException {
        File directoryPath = new File("D:\\ExampleDirectory");

        FileFilter dirFilter = File::isDirectory; // Method Reference
        File[] dirs = directoryPath.listFiles(dirFilter);

        System.out.println("Directories:");
        for (File d : dirs) System.out.println(d.getAbsolutePath());
    }
}

วิธีที่ 2: NIO.2 Files.walk + Filter (Java 8+)

import java.io.IOException;
import java.nio.file.*;
import java.util.stream.Stream;

public class ListOfFiles {
    public static void main(String[] args) throws IOException {
        Stream path = Files.walk(Paths.get("D:\\ExampleDirectory"));
        path.filter(Files::isDirectory).forEach(System.out::println);
    }
}

ผลลัพธ์ตัวอย่าง

Directories:
D:\ExampleDirectory\sample directory1
D:\ExampleDirectory\sample directory2
D:\ExampleDirectory\sample directory3
D:\ExampleDirectory\sample directory4

ความแตกต่าง

คุณสมบัติFile.listFiles(FileFilter)Files.walk()
Recursiveไม่ (เฉพาะ Top-level)ใช่ (ทั้ง Tree)
Return TypeFile[]Stream
Performanceเร็วสำหรับ Shallowเหมาะ Deep/Recursive

หมายเหตุ

Files.walk() ต้อง Close Stream (Try-with-resources) ใน Production Code