Java IO – Read and write text files

Reading Character Streams – Classes

All classes that read character stream extend java.io.Reader. The important classes are:

  • InputStreamReader-This class reads bytes from an underlying stream and converts it to characters using a Charset. It acts as a bridge between a byte stream and character stream
  • PipedReader- This class connects to a PipedWriter and reads characters from it.
  • BufferedReader-Reads characters from a character input stream and buffers data. The buffering can efficiently read lines or array of characters. It is wrapped around another reader that reads a single character of data such as FileReader or InputStreamReader
  • FileReader-This is a convenience class for reading characters from a file. It extends InputStreamReader. It uses the default encoding scheme and byte buffer. To specify another encoding scheme or byte buffer create an implementation of InputSteamReader on a FileInputStream

Writing Character Streams – Classes

All classes that write character stream extend java.io.Writer. The important classe are:

  • OutputStreamWriter-This class encodes characters to bytes using a specified charset.It acts as a bridge between a character stream and byte stream
  • FileWriter-This class extends OutputStreamWriter and is a convenience method for writing to files. It uses a default encoding and buffer size. To specify a different buffer size or encoding scheme, create an OutputStreamWriter on a FileOutputStream
  • PipedWriter-This can be connected to a PipedReader. It writes characters to the stream which is read by the PipedReader.
  • PrintWriter-This class formats objects and writes them to a character stream. It has automatic flushing for some methods. It never throws IOException. This class is very useful, for example, to write to a file the method println(String s) writes the string s, writes a newLine and then flushes the stream if auto flushing is enabled
  • BufferedWriter-Writes characters to a character stream after buffering them.A newLine() method is provided that writes the platforms line separator to the stream.

Read and write text files without buffering

classic example for reading and writing to a text file

FileReader reader = null;
FileWriter writer = null;
try {
	reader = new FileReader("in.txt");
	writer = new FileWriter("out.txt");
	int a = 0;
		while ((a = reader.read()) != -1) {
			writer.write(a);
		}
	} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
} finally {
	try {
		reader.close();
		writer.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

Read and write text files with buffering

Reading and writing using buffered reader and writer. Note the use of the apache IOUtils class to close the stream.

BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
	bufferedReader = new BufferedReader(new FileReader("in.txt"));
	bufferedWriter = new BufferedWriter(new FileWriter("out.txt"));
	String s = "";
	while ((s = bufferedReader.readLine()) != null) {
		bufferedWriter.write(s);
		// write a new line
		bufferedWriter.newLine();
		// flush
		bufferedWriter.flush();
	}
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
} finally {
	// close without throwing exception
	IOUtils.closeQuietly(bufferedReader);
	IOUtils.closeQuietly(bufferedWriter);
}

Read Unicode file

The following example demonstrates how to read a file encoded in unicode

Reading and Writing – Convenient methods

Get the contents of an input stream as byte array

Get the contents of inputstream as list of Strings

Get the contents of inputstream as list of Strings

Convert a string to input stream

Write array of bytes to output stream.

Write a collection of lines to outputstream

read the contents of a file into a string. There is a similar write method too.

Read file into a list of strings

use java.io.file.Files to get a buffered reader, writer and inputstream

One thought on “Java IO – Read and write text files

  • May 18, 2018 at 4:22 am
    Permalink

    A stream transports data from some point A to some other point B. It may modify the data on its way. A stream is not active on its own. Some other object must push data into a stream or pull data from a stream. Many thanks for sharing this.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.