วิธีที่ 1: FilenameFilter (Legacy IO - Top Level)
import java.io.*;
public class Sample {
public static void main(String args[]) throws IOException {
File directoryPath = new File("D:\\ExampleDirectory");
FilenameFilter jpgFilter = (dir, name) -> name.toLowerCase().endsWith(".jpg");
String[] jpgFiles = directoryPath.list(jpgFilter);
System.out.println("JPG Files:");
for (String f : jpgFiles) System.out.println(f);
}
}
วิธีที่ 2: NIO.2 Files.walk + Stream (Recursive)
import java.io.IOException;
import java.nio.file.*;
import java.util.stream.Stream;
public class Example {
public static void main(String[] args) throws IOException {
Stream path = Files.walk(Paths.get("D:\\ExampleDirectory"));
path.filter(p -> p.toString().toLowerCase().endsWith(".jpg"))
.forEach(System.out::println);
}
}
ผลลัพธ์ตัวอย่าง
JPG Files:
cassandra_logo.jpg
cat.jpg
coffeescript_logo.jpg
javafx_logo.jpg
ขยาย: รองรับหลาย Extension
FilenameFilter imageFilter = (dir, name) -> {
String lower = name.toLowerCase();
return lower.endsWith(".jpg") || lower.endsWith(".jpeg") || lower.endsWith(".png");
};
สรุป
- Top-level:
File.list(FilenameFilter) เร็ว สำหรับ Directory เดียว
- Recursive:
Files.walk() + filter(...endsWith(...)) ครอบคลุม Subdirectories
- ใช้
.toLowerCase() ก่อน endsWith() เพื่อ Case-insensitive