Java Reference
In-Depth Information
Chapter 10
Writing Files
WHAT YOU WILL LEARN IN THIS CHAPTER
• The principles of reading and writing files
• How you obtain a file channel for a file
• How you create a buffer and load it with data
• What view buffers are and how you use them
• How you use a channel object and buffer objects to write data to a file
In this chapter, you look at ways to write binary or character data to a file. The mechanisms for writing binary
data are different from those for writing character data. You'll be writing both types of files in this chapter
and reading them back in the next.
FILE I/O BASICS
If you are new to programming file operations, there are a couple of things about how they work that may not
be apparent to you and can be a source of confusion, so I'll clarify these before I go any further. If you already
know how input and output for disk files work, you can skip this section.
First, let's consider the nature of a file. After you have written data to a file, what you have is just a linear
sequence of bytes. The bytes in a file are referenced by their offset from the beginning, so the first byte is
byte 0, the next byte is byte 1, the third byte is byte 2, and so on through to the end of the file. If there are n
bytes in a file, the last byte is at offset n −1. There is no specific information in the file about how the data
originated or what it represents unless you explicitly put it there. Even if there is, you need to know that there
is information that tells you how the data is formatted, and read and interpret the data accordingly.
For example, if you write a series of 25 binary values of type int to a file, it contains 100 bytes. Nothing
in the file indicates that the data consists of 4-byte integers so there is nothing to prevent you from reading
the data back as 50 Unicode characters or 10 long values followed by a string, or any other arbitrary collec-
tion of data items that corresponds to 100 bytes. Of course, the result is unlikely to be very meaningful unless
you interpret the data in the form in which it was originally written. This implies that to read data from a file
correctly, you need to have prior knowledge of the structure and format of the data that is in the file.
The form of the data in the file may be recorded or implied in many ways. For example, one way that the
format of the data in a file can be communicated is to use a standardized file name extension for data of a
particular kind, such as .java for a Java source file or .jpg for a graphical image file or .wav for a sound
file. Each type of file has a predefined structure, so from the file extension you know how to interpret the
data in the file. Of course, another way of transferring data so that it can be interpreted correctly is to use a
generalized mechanism for communicating data and its structure, such as XML. XML files also express form
Search WWH ::




Custom Search