RandomAccessFile в Java
Java RandomAccessFile обеспечивает несущественный доступ к файлам. Он ведет себя как большой массив байтов, хранящихся в файловой системе. Это означает, что вам не нужно начинать с первой строки, и вы можете прыгать в любом месте файла. Это похоже на структуру данных массива. Так же, как вы можете получить доступ к любому элементу массива по индексу, вы можете прочитать любой контент из файла с помощью указателя на файл. Реальное преимущество заключается в том, что как только файл открывается, его можно читать или записывать случайным образом, просто используя номер записи или вы можете добавить его до конца, так как вы будете знать, сколько записей в файле.
Перемещение вокруг RandomAccessFile
Класс RandomAccessFile позволяет перейти в определенное место в файле с помощью метода seek(). Как только указатель файла был помещен, данные могут быть прочитаны и записаны в файл с использованием интерфейсов DataInput и DataOutput. Эти интерфейсы позволяют нам считывать и записывать данные независимым от платформы способом. Текущую позицию указателя файла можно получить, вызвав метод getFilePointer().
1 |
RandomAccessFile(File file, String mode) |
Вышеупомянутый конструктор создает поток файлов произвольного доступа для чтения и, возможно, для записи файла, указанного аргументом File.
Режим доступа
В RandomAccessFile, в то время как экземпляр режима по умолчанию доступен только для чтения. Но мы можем предоставить другой режим. Эти режимы
1 2 3 4 |
"r" : File is open for read only. "rw" : File is open for read and write both. "rws" : Same as rw mode. It also supports to update file content synchronously to device storage. "rwd" : Same as rw mode that also supports reduced number of IO operation. |
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import Java.util.*; import Java.io.*; public class TestClass{ public static void main(String[] args) { try { RandomAccessFile raFile =new RandomAccessFile("D://test.txt", "rw"); raFile.write("Java Tutorial".getBytes()); // добавление содержимого raFile.seek(raFile.getFilePointer()-8); // установить указатель назад -8 символов raFile.write("File Class Tutorial ".getBytes()); // пишем текст, где указатель raFile.seek(0); // установить указатель на начало файла int i; while((i= raFile.read())!=-1){ System.out.print((char)i); } } catch (IOException e){ e.printStackTrace(); } } } |
Выход
1 |
Java File Class Tutorial |