Java IO: Files

Jakob Jenkov
Last update: 2020-03-15

Files are a common source or destination of data in Java applications. Therefore this text will give you a brief overview of working with files in Java. It is not the intention to explain every technique in detail here, but rather to provide you with enough knowledge to decide on a file access method. Separate pages will describe each of these methods or classes in more detail, including examples of their usage etc.

Java IO File Classes

The Java IO API contains the following classes which are relevant to working with files in Java:

These classes are explained in more detail in their own texts, but the sections below will give a brief introduction to these classes.

Reading Files via Java IO

If you need to read a file from one end to the other you can use a FileInputStream or a FileReader depending on whether you want to read the file as binary or textual data. These two classes lets you read a file one byte or character at a time from the start to the end of the file, or read the bytes into an array of byte or char, again from start towards the end of the file. You don't have to read the whole file, but you can only read bytes and chars in the sequence they are stored in the file.

If you need to jump around the file and read only parts of it from here and there, you can use a RandomAccessFile.

Writing File via Java IO

If you need to write a file from one end to the other you can use a FileOutputStream or a FileWriter depending on whether you need to write binary data or characters. You can write a byte or character at a time from the beginning to the end of the file, or write arrays of byte and char. Data is stored sequentially in the file in the order they are written.

If you need to skip around a file and write to it in various places, for instance appending to the end of the file, you can use a RandomAccessFile.

Random Access to Files via Java IO

As I have already mentioned, you can get random access to files with Java IO via the RandomAccessFile class.

Random access doesn't mean that you read or write from truly random places. It just means that you can skip around the file and read from or write to it at the same time in any way you want. This is what is meant by "random" - that the next byte read is not determined by the previous byte read. No particular access sequence is enforced. You can access the bytes in the file "at random" - arbitrarily. This makes it possible to overwrite parts of an existing file, to append to it, delete from it, and of course read from the file from wherever you need to read from it.

File and Directory Info Access

Sometimes you may need access to information about a file rather than its content. For instance, if you need to know the file size or the file attributes of a file. The same may be true for a directory. For instance, you may want to get a list of all files in a given directory. Both file and directory information is available via the File class.

Jakob Jenkov

Featured Videos

Core Software Performance Optimization Principles


Java Persistence
Close TOC

All Trails

Trail TOC

Page TOC