Scanner x DataInputStream x BufferedReader - Qual usar?

Colegas, alguém consegue dar uma dica de qual a melhor forma de se criar uma funcionalidade em um programa desktop que abra e leia, linha a linha, um arquivo texto selecionado pelo usuário com a classe JFileChooser?

Na internet, encontro textos usando Scanner, DataInputStream e também BufferedReader e isso está fazendo uma confusão danada em minha cabeça.

Hehe… Tem muitas classes mesmo que lêem e escrevem em arquivos.
Eu particularmente utilizo o BufferedReader para ler.
Se quiser mais um tutorial para ler, ta aqui mais um: manipulando-arquivo-txt-com-java

Jovem utilize o BufferedReader.

Abs,