To discover file properties, delete and rename files using the File class (§16.2). To understand how I/O is processed in Java (§16.3). To distinguish between text I/O and binary I/O (§16.3). To read and write characters using FileReader and FileWriter (§16.4). To improve the performance of text I/O using BufferedReader and BufferedWriter (§16.4). To write primitive values, strings, and objects as text using PrintWriter and PrintStream(§16.4). To read and write bytes using FileInputStreamand FileOutputStream (§16.6). To read and write primitive values and strings using DataInputStream/DataOutputStream(§16.6). To store and restore objects using ObjectOutputStreamand ObjectInputStream, and to understand how objects are serialized and what kind of objects can be serialized (§16.9 Optional). To use the Serializable interface to enable objects to be serializable (§16.9 Optional). To use RandomAccessFile for both read and write. (§16.10 Optional)