Java
Beginner
1 min read
Walking Directory Trees with Files.walk
Example
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.List;
import java.util.stream.Collectors;
public class DirectoryWalkDemo {
public static void main(String[] args) throws IOException {
// Set up a demo directory tree
Path root = Path.of("demo-tree");
Files.createDirectories(root.resolve("src/main"));
Files.createDirectories(root.resolve("src/test"));
Files.writeString(root.resolve("src/main/App.java"), "// App");
Files.writeString(root.resolve("src/main/Util.java"), "// Util");
Files.writeString(root.resolve("src/test/AppTest.java"), "// Test");
Files.writeString(root.resolve("README.md"), "# Demo");
// --- Files.walk: all .java files ---
System.out.println("All .java files:");
try (var stream = Files.walk(root)) {
stream.filter(p -> p.toString().endsWith(".java"))
.forEach(p -> System.out.println(" " + p));
}
// --- Files.walk: count files vs directories ---
try (var stream = Files.walk(root)) {
long fileCount = stream.filter(Files::isRegularFile).count();
System.out.println("Regular file count: " + fileCount);
}
// --- Files.find with attributes ---
System.out.println("\nFiles larger than 5 bytes:");
try (var stream = Files.find(root, 10,
(path, attrs) -> attrs.isRegularFile() && attrs.size() > 5)) {
stream.forEach(p -> System.out.println(" " + p));
}
// --- SimpleFileVisitor: delete tree ---
Files.walkFileTree(root, new SimpleFileVisitor<>() {
@Override public FileVisitResult visitFile(Path f, BasicFileAttributes a)
throws IOException { Files.delete(f); return FileVisitResult.CONTINUE; }
@Override public FileVisitResult postVisitDirectory(Path d, IOException e)
throws IOException { Files.delete(d); return FileVisitResult.CONTINUE; }
});
System.out.println("Tree deleted. Exists: " + Files.exists(root));
}
}