Сегодня мы рассмотрим способ применения RandomAccessFile, а также зачем он нужен и как его использовать.
RandomAccessFile. Теория
RandomAccessFile
в Java предоставляет возможность читать с файла и записывать данные в файл. RandomAccessFile
работает с файлом как с большим массивом байтов. Он использует курсор с помощью которого мы можем переместить указатель файла в определенную позицию.
При создании экземпляра RandomAccessFile
, мы должны выбрать режим файла, например "r"
, если вы хотите прочитать данные с файла или "rw"
— если вы хотите читать с файла и писать в файл.
С помощью указателя файла мы можем читать из файла или записывать данные в файл в любом месте. Чтобы получить текущий указатель файла, используется метод getFilePointer()
.
Чтобы установить индекс указателя файла используется метод seek(int i)
.
Следует отметить, что если мы пишем в файл по индексу, где данные уже присутствуют, то они будут заменены.
RandomAccessFile в Java. Пример использования
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package ua.com.prologistic; import java.io.IOException; import java.io.RandomAccessFile; public class RandomAccessFileExample { public static void main(String[] args) { try { String filePath = "/Users/prologistic/source.txt"; System.out.println(new String(readCharsFromFile(filePath, 1, 5))); writeData(filePath, "Data", 5); } catch (IOException e) { e.printStackTrace(); } } // метод для записи данных в файл private static void writeData(String filePath, String data, int seek) throws IOException { // открываем файл с возможностью как чтения, так и записи RandomAccessFile file = new RandomAccessFile(filePath, "rw"); // переходим на определенный индекс file.seek(seek); // запишем данные в этом месте file.write(data.getBytes()); file.close(); } // метод для чтения с файла private static byte[] readCharsFromFile(String filePath, int seek, int chars) throws IOException { // открываем файл только для чтения RandomAccessFile file = new RandomAccessFile(filePath, "r"); file.seek(seek); byte[] bytes = new byte[chars]; file.read(bytes); file.close(); return bytes; } } |
Следите за обновлениями раздела Java IO.
It’s a relief to find sonemoe who can explain things so well
Лучше заменить в readCharsFromFile в параметрах метода и далее chars на size, а то вводит в заблуждение.