In the java.io
package, the classes for working with streams come in matched sets. There are FileInputStream
and FileOutputStreams
classes for working with byte streams, FileReader
and FileWriter
classes for working with character streams, and many other sets for working with other kinds of stream data.
To begin writing data, you first create a File
object that is associated with an output stream. This file doesn’t have to exist on your system.
You can create a FileOutputStream
in two ways. If you want to append bytes onto an existing file, call the FileOutputStream()
constructor method with two arguments: a File
object representing the file and the boolean
of true
. The bytes you write to the stream are tacked onto the end of the file.
If you want to write bytes into a new file, call the FileOutputStream()
constructor method with a File
object as its only object.
After you have an output stream, you can call different write()
methods to write bytes to it:
• Call write()
with a byte as its only argument to write that byte to the stream.
• Call write()
with a byte array as its only argument to write all the array’s bytes to the stream.
• Specify three arguments to the write(
byte[],
int,
int)
method: a byte array, an integer representing the first element of the array to write to the stream, and the number of bytes to write.
The following statement creates a byte array with 10 bytes and writes the last 5 to an output stream:
File dat = new File("data.dat");
FileOutputStream datStream = new FileOutputStream(dat);
byte[] data = new byte[] { 5, 12, 4, 13, 3, 15, 2, 17, 1, 18 };
datStream.write(data, 5, 5);
When writing bytes to a stream, you can convert text to an array of bytes by calling the String
object’s getBytes()
method, as in this example:
String name = "Puddin N. Tane";
byte[] nameBytes = name.getBytes();
After you have finished writing bytes to a stream, you close it by calling the stream’s close()
method.
The next project you write is a simple application, ConfigWriter
, that saves several lines of text to a file by writing bytes to a file output stream. Create an empty Java file of that name and enter the text from Listing 20.3 into the source editor.
1: import java.io.*;
2:
3: class ConfigWriter {
4: String newline = System.getProperty("line.separator");
5:
6: ConfigWriter() {
7: try {
8: File file = new File("program.properties");
9: FileOutputStream fileStream = new FileOutputStream(file);
10: write(fileStream, "username=max");
11: write(fileStream, "score=12550");
12: write(fileStream, "level=5");
13: } catch (IOException ioe) {
14: System.out.println("Could not write file");
15: }
16: }
17:
18: void write(FileOutputStream stream, String output)
19: throws IOException {
20:
21: output = output + newline;
22: byte[] data = output.getBytes();
23: stream.write(data, 0, data.length);
24: }
25:
26: public static void main(String[] arguments) {
27: ConfigWriter cw = new ConfigWriter();
28: }
29: }
When this application is run, it creates a file called program.properties
that contains the following three lines of text:
username=max
score=12550
level=5
3.144.172.233