Difference between buffered reader and file reader and scanner class

bufferedreader, filereader, java, java.util.scanner

Solution

Well:

- `FileReader` is just a `Reader` which reads a file, using the platform-default encoding (urgh)

- `BufferedReader` is a wrapper around another `Reader`, adding buffering and the ability to read a line at a time

- `Scanner` reads from a variety of different sources, but is typically used for interactive input. Personally I find the API of `Scanner` to be pretty painful and obscure.

To read a text file, I would suggest using a `FileInputStream` wrapped in an `InputStreamReader` (so you can specify the encoding) and then wrapped in a `BufferedReader` for buffering and the ability to read a line at a time.

Alternatively, you could use a third-party library which makes it simpler, such as Guava:

File file = new File("foo.txt");
List<String> lines = Files.readLines(file, Charsets.UTF_8);

Or if you're using Java 7, it's already available for you in `java.nio.file.Files`:

Path path = FileSystems.getDefault().getPath("foo.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);

Problem

Can anyone explain me the difference between the class `BufferedReader`, `FileReader` and `Scanner`? and which one to use when I want to read a text file?

Original source

Related problems