Java RandomAccessFile предоставляет возможность чтения и записи данных в файл. RandomAccessFile работает с файлом как с большим массивом байтов, хранящимся в файловой системе, и с помощью курсора мы можем перемещать позицию указателя файла.
Java RandomAccessFile
Класс RandomAccessFile является частью Java IO. При создании экземпляра RandomAccessFile в Java мы должны указать режим открытия файла. Например, для открытия файла только для чтения мы должны использовать “r”, а для операций чтения и записи – “rw”. Используя указатель файла, мы можем читать или записывать данные из файла с произвольной позиции. Чтобы получить текущий указатель файла, можно вызвать метод
getFilePointer()
, а для установки индекса указателя файла можно вызвать метод seek(int i)
. Если мы записываем данные в индекс, где уже есть данные, они будут перезаписаны.
Пример чтения Java RandomAccessFile
Мы можем прочитать массив байтов из файла, используя RandomAccessFile в Java. Ниже приведен псевдокод для чтения файла с использованием RandomAccessFile.
RandomAccessFile raf = new RandomAccessFile("file.txt", "r");
raf.seek(1);
byte[] bytes = new byte[5];
raf.read(bytes);
raf.close();
System.out.println(new String(bytes));
В первой строке мы создаем экземпляр RandomAccessFile для файла в режиме только для чтения. Затем, на второй строке, мы перемещаем указатель файла к индексу 1. Мы создали массив байтов длиной 5, поэтому при вызове метода read(bytes) считываются 5 байтов из файла в массив байтов. Наконец, мы закрываем ресурс RandomAccessFile и выводим массив байтов в консоль.
Пример записи в Java RandomAccessFile
Вот простой пример, показывающий, как записать данные в файл с использованием RandomAccessFile в Java.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(5);
raf.write("Data".getBytes());
raf.close();
Поскольку RandomAccessFile рассматривает файл как массив байтов, операция записи может как перезаписывать данные, так и добавлять их в файл. Все зависит от положения указателя файла. Если указатель перемещен за пределы длины файла, а затем вызывается операция записи, то в файле будут записаны мусорные данные. Поэтому при использовании операции записи следует об этом позаботиться.
Пример добавления в RandomAccessFile
Все, что нам нужно, – это убедиться, что указатель файла находится в конце файла для добавления в файл. Ниже приведен код для добавления в файл с использованием RandomAccessFile.
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
raf.seek(raf.length());
raf.write("Data".getBytes());
raf.close();
Пример Java RandomAccessFile
Вот полный пример Java RandomAccessFile с различными операциями чтения и записи.
package com.journaldev.files;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileExample {
public static void main(String[] args) {
try {
// содержимое файла "ABCDEFGH"
String filePath = "/Users/pankaj/Downloads/source.txt";
System.out.println(new String(readCharsFromFile(filePath, 1, 5)));
writeData(filePath, "Data", 5);
//теперь содержимое файла "ABCDEData"
appendData(filePath, "pankaj");
//теперь содержимое файла "ABCDEDatapankaj"
} catch (IOException e) {
e.printStackTrace();
}
}
private static void appendData(String filePath, String data) throws IOException {
RandomAccessFile raFile = new RandomAccessFile(filePath, "rw");
raFile.seek(raFile.length());
System.out.println("current pointer = "+raFile.getFilePointer());
raFile.write(data.getBytes());
raFile.close();
}
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;
}
}
Это все для RandomAccessFile в Java.
Source:
https://www.digitalocean.com/community/tutorials/java-randomaccessfile-example