Автор оригинала: Pankaj Kumar.
Java RandomAccessFile предоставляет возможность чтения и записи данных в файл. RandomAccessFile работает с файлом в виде большого массива байтов, хранящихся в файловой системе, и курсора, с помощью которого мы можем перемещать положение указателя файла.
Java RandomAccessFile
Используя указатель файла, мы можем считывать или записывать данные из файла с произвольным доступом в любом месте. Чтобы получить текущий указатель на файл, вы можете вызвать метод 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(байты), из файла в массив байтов считывается 5 байтов.
Наконец, мы закрываем ресурс RandomAccessFile и печатаем массив байтов на консоль.
Пример записи случайного файла Java
Вот простой пример, показывающий, как записать данные в файл с помощью 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
Вот полный пример java RandomAccessFile с различными операциями чтения и записи.
package com.journaldev.files; import java.io.IOException; import java.io.RandomAccessFile; public class RandomAccessFileExample { public static void main(String[] args) { try { // file content is "ABCDEFGH" String filePath = "/Users/pankaj/Downloads/source.txt"; System.out.println(new String(readCharsFromFile(filePath, 1, 5))); writeData(filePath, "Data", 5); //now file content is "ABCDEData" appendData(filePath, "pankaj"); //now file content is "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.