I/O

io3CharacterStreams

Path
pkg9io/io3CharacterStreams.java
Package
pkg9io
Study order
3
Run
Single-file source launch
Command
java pkg9io/io3CharacterStreams.java

There is no in-browser runner. This is the file from the curriculum, unchanged.

pkg9io/io3CharacterStreams.java
1package pkg9io;2 3import java.io.BufferedReader;4import java.io.BufferedWriter;5import java.io.FileReader;6import java.io.FileWriter;7import java.io.IOException;8import java.io.PrintWriter;9import java.io.StringReader;10import java.nio.file.Files;11import java.nio.file.Path;12 13/*14 * io3CharacterStreams.java15 * ------------------------16 * Character streams: Reader / Writer for text, with encoding handled for you.17 *18 * DEFINITION:19 *   Character streams convert between bytes and 16-bit chars using a charset.20 *   Use them whenever you read or write text instead of raw bytes.21 *22 * KEY POINTS:23 *   - BufferedReader.readLine() reads a line at a time; returns null at EOF.24 *   - BufferedWriter / PrintWriter buffer output; PrintWriter adds println/printf.25 *   - FileReader/FileWriter use the platform charset (prefer Files.* with UTF-8).26 *   - try-with-resources closes and flushes automatically.27 */28public class io3CharacterStreams {29 30    public static void main(String[] args) throws IOException {31        Path file = Files.createTempFile("io3", ".txt");32 33        // WRITE text line by line34        try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file.toFile())))) {35            out.println("line 1: hello");36            out.printf("line %d: %s%n", 2, "formatted");37            out.println("line 3: end");38        }39 40        // READ text line by line41        System.out.println("File contents:");42        try (BufferedReader in = new BufferedReader(new FileReader(file.toFile()))) {43            String line;44            int n = 1;45            while ((line = in.readLine()) != null) {     // null == end of file46                System.out.println("  " + (n++) + " | " + line);47            }48        }49 50        // Reader over an in-memory String, plus the Stream-of-lines API (Java 8+)51        String csv = "a,1\nb,2\nc,3";52        System.out.println("\nParsed from StringReader:");53        try (BufferedReader r = new BufferedReader(new StringReader(csv))) {54            r.lines()55             .map(l -> l.split(","))56             .forEach(parts -> System.out.println("  key=" + parts[0] + " val=" + parts[1]));57        }58 59        Files.deleteIfExists(file);60    }61}