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?
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 timeScanner
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);