NIO (New I/O)
Path — Representing a Location
Creating and inspecting a Path
import java.nio.file.Path;
Path path = Path.of("data", "reports", "summary.txt");
System.out.println(path);
System.out.println(path.getFileName());
System.out.println(path.getParent());
System.out.println(path.toAbsolutePath());data\reports\summary.txt summary.txt data\reports /home/user/project/data/reports/summary.txt
Files — Doing Things With a Path
Common Files operations
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class NioDemo {
public static void main(String[] args) throws IOException {
Path original = Path.of("notes.txt");
Files.writeString(original, "First draft");
System.out.println(Files.exists(original));
Path backup = Path.of("notes-backup.txt");
Files.copy(original, backup, StandardCopyOption.REPLACE_EXISTING);
Path renamed = Path.of("notes-final.txt");
Files.move(original, renamed, StandardCopyOption.REPLACE_EXISTING);
System.out.println(Files.readString(renamed));
Files.delete(backup);
Files.delete(renamed);
}
}true First draft
Walking a Directory Tree
Listing all .txt files under a directory
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;
Path root = Path.of(".");
try (Stream<Path> paths = Files.walk(root)) {
paths.filter(p -> p.toString().endsWith(".txt"))
.forEach(System.out::println);
} catch (IOException e) {
System.err.println("Failed to walk directory: " + e.getMessage());
}Aspect | java.io.File (legacy) | java.nio.file (NIO.2) |
|---|---|---|
Introduced | Java 1.0 | Java 7 |
Error reporting | Boolean return values (silent failure) | Descriptive exceptions (IOException subtypes) |
Directory traversal | Manual recursion with listFiles() | Files.walk() returns a Stream<Path> |
Symbolic link support | Limited | First-class support |
Bulk operations | Not built in | copy(), move(), delete() built in |
Path represents a filesystem location; it doesn't touch the disk on its own
Files provides static methods for the actual work: exists(), copy(), move(), delete()
Files.walk() returns a Stream<Path> for recursively processing a directory tree
NIO.2 gives clearer exceptions and better symbolic-link handling than the legacy File API