Java Exceptions, Collections, and I/O