Se cierran todos cerrando el más externo.
Cita: ue pasaría si en lugar de inicializar los streams por separado hiciera algo del estilo:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f));
Esto es equivalente a tu trozo de código.
Si lees las API o te fijas en las opciones que te muestra tu IDE al llamar a un costructor, verás cosas como
http://download.oracle.com/javase/1....putStream.html Cita: FileInputStream(String name)
Creates a FileInputStream by opening a connection to an actual file, the file named by the path name name in the file system.
No necesitas crear un objeto File para usar un FileInputStream