The JavaTM Tutorial

| Start of Tutorial > Start of Trail > Start of Lesson | Search Feedback Form

Trail: Essential Java Classes
Lesson: I/O: Reading and Writing (but no 'rithmetic)

## How to Use File Streams

> File streams are perhaps the easiest streams to understand. The file streams-- `FileReader`, `FileWriter`, `FileInputStream`, and `FileOutputStream`--each read or write from a file on the native file system. You can create a file stream from a file name in the form of a string, a `File` object, or a `FileDescriptor` 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 and writes those characters to the writer. When the input runs out, the program closes both the reader and the writer.

> Here is the code that the `Copy` program uses to create a file reader:

> >     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`. The `Copy` program uses this object only to construct a file reader on a file. However, the program could use `inputFile` to get information, such as its full path name, about the file.

> 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 the encoding. For information about encoding characters, see the Internationalization trail.

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

| Start of Tutorial > Start of Trail > Start of Lesson | Search Feedback Form

Copyright 1995-2004 Sun Microsystems, Inc. All rights reserved.