Previous | Next | Trail Map | Essential Java Classes | Reading and Writing


How to Use File Streams

File streams are perhaps the easiest streams to understand. Simply put, the file streams-- FileReader(in the API reference documentation), FileWriter(in the API reference documentation), FileInputStream(in the API reference documentation), and FileOutputStream(in the API reference documentation)--each read or write from a file on the native file system. You can create a file stream from a filename, a File(in the API reference documentation) object, or a FileDescriptor(in the API reference documentation) object.

The following Copy program uses FileReader and FileWriter to copy the contents of a file named farrago.txt into a file called outagain.txt:

import java.io.*;

public class Copy {
    public static void main(String[] args) throws IOException {
	File inputFile = new File("farrago.txt");
	File outputFile = new File("outagain.txt");

        FileReader in = new FileReader(inputFile);
        FileWriter out = new FileWriter(outputFile);
        int c;

        while ((c = in.read()) != -1)
           out.write(c);

        in.close();
        out.close();
    }
}
This program is very simple. It opens a FileReader on farrago.txt and opens a FileWriter on outagain.txt. The program reads characters from the reader as long as there's more input in the input file. When the input runs out, the program closes both the reader and the writer.

Notice the code that the Copy program uses to create a FileReader:

File inputFile = new File("farrago.txt"); 
FileReader in = new FileReader(inputFile);
This code creates a File object that represents the named file on the native file system. File is a utility class provided by java.io. This program uses this object only to construct a FileReader on farrago.txt. However, it could use inputFile to get information about farrago.txt, such as its full pathname.

After you've run the program, you should find an exact copy of farrago.txt in a file named outagain.txt in the same directory. Here is the content of the file:

So she went into the garden to cut a cabbage-leaf, to
make an apple-pie; and at the same time a great
she-bear, coming up the street, pops its head into the
shop. 'What! no soap?' So he died, and she very
imprudently married the barber; and there were
present the Picninnies, and the Joblillies, and the
Garyalies, and the grand Panjandrum himself, with the
little round button at top, and they all fell to playing
the game of catch as catch can, till the gun powder ran
out at the heels of their boots.

Samuel Foote 1720-1777
Remember that FileReader and FileWriter read and write 16-bit characters. However, most native file systems are based on 8-bit bytes. These streams encode the characters as they operate according to the default character-encoding scheme. You can find out the default character-encoding by using System.getProperty("file.encoding"). To specify an encoding other than the default, you should construct an OutputStreamWriter on a FileOutputStream and specify it. For information about encoding characters, see the Writing Global Programs trail.

For the curious, here is another version of this program, CopyBytes, which uses FileInputStream and FileOutputStream in place of FileReader and FileWriter.


Previous | Next | Trail Map | Essential Java Classes | Reading and Writing