- We can use java.io.BufferedReader class for efficiently reading a text file line by line.
- public class BufferedReader
- extends Reader
There are two constructors. One has a default buffer size (8192 characters); the other requires the programmer to specify the buffer size:
public BufferedReader(Reader in, int buffer_size)
public BufferedReader(Reader in)
In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to wrap a BufferedReader around any Reader whose read() operations may be costly, such as FileReaders and InputStreamReaders. For example,
BufferedReader in = new BufferedReader(new FileReader("t1.txt"));
will buffer the input from the specified file. Without buffering, each
invocation of read() or readLine() could cause bytes to be read from the
file, converted into characters, and then returned, which can be very
inefficient.BufferedReader is notable for its readLine() method that allows you to read text a line at a time.
Read File Line by Line using BufferedReader and FileReader
The following code shows how to read a text file line by line using FileReader and BufferedReader.
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ReadFileLineByLine { /** * @param Pass * Filename as command-line argument * @throws IOException **/ public static void main(String[] args) { BufferedReader br = null; String cline; try { br = new BufferedReader(new FileReader(args[0])); while ((cline = br.readLine()) != null) { System.out.println(cline); } } catch (IOException e) { System.out.println(e); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } }
One drawback of the above code is that FileReader and FileWriter, which implicitly use the system's default character encoding.In some scenarios this default is not appropriate(for example, read an XML file with specified encoding).Here you can make use of java.io.InputStreamReader class.
- public class InputStreamReader
- extends Reader
charset
. The charset that it uses
may be specified by name or may be given explicitly, or the platform's
default charset may be accepted.
The following code shows how to read a text file line by line, using an explicit encoding.
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class ReadFileLineByLine { /** * @param Pass * Filename as command-line argument * @throws IOException **/ public static void main(String[] args) { BufferedReader br = null; String cline; try { FileInputStream fin = new FileInputStream(args[0]); br = new BufferedReader(new InputStreamReader(fin, "UTF-8")); while ((cline = br.readLine()) != null) { System.out.println(cline); } } catch (IOException e) { System.out.println(e); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } }
If you remove reference to encoding from InputStreamReader class, it will still work -- the system's default encoding will simply be used instead.
Thank you. Btw. since Java 7 you can use try-with-resources, which simplifies closing files.
ReplyDelete