วิธีที่ 1: ใช้ File.list() + Loop + equals()
import java.io.File;
import java.util.Arrays;
import java.util.Scanner;
public class Example {
public static void main(String[] argv) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the directory path:");
String pathStr = sc.next();
System.out.println("Enter the desired file name:");
String fileName = sc.next();
File dir = new File(pathStr);
String[] list = dir.list();
System.out.println(Arrays.toString(list));
boolean found = false;
for (String name : list) {
if (fileName.equals(name)) { found = true; break; }
}
System.out.println(found ? "File Found" : "File Not Found");
}
}
วิธีที่ 2: ใช้ FilenameFilter (Built-in Filtering)
import java.io.File;
import java.io.FilenameFilter;
public class Example {
public static void main(String[] argv) throws Exception {
File dir = new File("D:\\ExampleDirectory");
FilenameFilter filter = (d, name) -> name.equalsIgnoreCase("demo1.pdf");
String[] files = dir.list(filter);
if (files == null || files.length == 0) {
System.out.println("File Not Found");
} else {
System.out.println("File Found: " + Arrays.toString(files));
}
}
}
ผลลัพธ์ตัวอย่าง
Enter the directory path: D:\ExampleDirectory
Enter the desired file name: demo2.pdf
[demo1.pdf, demo2.pdf, sample directory1, ...]
File Found
ขยาย: ค้นหา Recursive (Subdirectories)
import java.io.IOException;
import java.nio.file.*;
import java.util.stream.Stream;
public class RecursiveSearch {
public static void main(String[] args) throws IOException {
Path start = Paths.get("D:\\ExampleDirectory");
String target = "demo1.pdf";
try (Stream stream = Files.walk(start)) {
boolean found = stream.anyMatch(p -> p.getFileName().toString().equalsIgnoreCase(target));
System.out.println(found ? "File Found" : "File Not Found");
}
}
}
สรุป
- Top-level only:
File.list() + loop หรือ File.list(FilenameFilter)
- Recursive:
Files.walk() + Stream Filter
FilenameFilter ใช้ Lambda สะดวก: (dir, name) -> name.endsWith(".pdf")