Packages allow organization of classes and import statements. Package statements declare the package a class belongs to and import statements allow referring to classes in other packages. The compiler uses package and import statements to find classes.
Reader and writer classes provide character-based input/output and are built upon stream classes. FileReader and FileWriter allow reading and writing of character files but performance can be improved by wrapping them in buffered classes like BufferedReader and BufferedWriter. PrintWriter is also commonly used for writing and provides additional functionality.