La classe File rappresenta una classe di gestione del file, non per la scrittura o lettura. Il FileReader infatti prende in ingresso anche il nome del file in String anziché l'intero oggetto file.
Generalmente il primo metodo è utilizzato per file di testo, mentre il secondo metodo con file binari che possono contenere Object
Infatti se guardi i metodi della classe BufferedReader sono adatti per il testo, mentre della ObjectInputStream per leggere oggetti.
cmq se non ricordo male la FileInputStream eredita da FileReader quindi al BufferedReader puoi passare un FileInputStream
altre classe interessante per la lettura è la DataInputStream per leggere int, double, float, etc.