Рубрики
Без рубрики

Пример случайного файла Java

Java RandomAccessFile, файл RandomAccess в java, пример Java RandomAccessFile, java.io.RandomAccessFile чтение, запись, поиск, указатель на файл, код rw массива байтов

Автор оригинала: 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.