Files, I/O and Dates
Byte and character streams, buffering, Path and Files (NIO.2), why Java serialization is dangerous, and correct dates and times with java.time.
Almost every real program reads something in and writes something out: a config file, a CSV upload, a network response, a log. Java's I/O library looks big, but it is built from a few small ideas. Everything is a stream of bytes; text is bytes plus an encoding; and small classes wrap other classes to add features like buffering or decoding. Once you see those three ideas, the forty classes in java.io stop being scary.
This phase starts with byte streams and character streams (Topic 12.1), then buffered readers and writers (Topic 12.2), the everyday way to read text line by line. Topic 12.3 moves to the modern file API, **Path and Files (NIO.2, Java 7, with handy additions in Java 11), which is what you should use for files today. Topic 12.4 explains Java's built-in serialization, why it has caused so many security incidents, and what to use instead. Topic 12.5 teaches java.time** (Java 8): the right way to handle dates, times, time zones and durations.
The runnable examples use in-memory streams (ByteArrayInputStream, StringReader and friends) and fixed dates, so they print the same thing every time and work in the browser. Real file code is shown as code you run on your own machine, with the output you should see.