RandomAccessFile
Класс произвольного доступа к файлу RandomAccessFile может реализовывать интерфейсы как к DataInput, так и к DataOutput. Это означает, что класс RandomAccessFile может быть использован как для ввода данных из файла, так и для вывода в файл.
Для того чтобы создать объект класса RandomAccessFile, необходимо вызвать его конструктор с двумя параметрами: именем файла для ввода/вывода и режимом доступа к открываемому файлу. Так может выглядеть открытие файла для чтения информации:
new RandomAccessFile ("some.dat", "r");
А в следующем примере файл открывается как для чтения, так и для записи:
new RandomAccessFile ("some.dat", "rw");
После того как файл открыт, вы можете использовать любые методы readXXX() и writeXXX() для ввода и вывода.
Основным же преимуществом класса RandomAccessFile является его способность читать и записывать данные в произвольное место файла. Программисты, работающие на Си и Си++, легко обнаружат, что в основе управления файлом лежит уже знакомый им файловый указатель, отмечающий текущую позицию, где происходит чтение или запись данных. В момент создания объекта класса RandomAccessFile файловый указатель устанавливается в начало файла и имеет значение 0. Вызовы методов readXXX() и writeXXX() обновляют позицию файлового указателя, сдвигая его на количество прочитанных (записанных) байтов. Для произвольного сдвига файлового указателя на некоторое количество байтов можно применить метод skipBytes(), или же установить файловый указатель в определенное место файла вызовом метода seek(). Для того чтобы узнать текущую позицию, в которой находится файловый указатель, нужно вызвать метод getFilePointer().
Помимо классов потоков ввода/вывода, описанных на этом занятии, существуют еще несколько классов, о которых мы не сказали. Они не так часто употребляются в программах Java, и поэтому вы можете отыскать их и освоить самостоятельно в тот момент, когда они вам понадобятся.