Доступ к одному и тому же файлу для чтения и записи случайной позиции

Начнем с того, что у меня нет большого опыта работы с Java, и я провел много исследований. Я хотел бы задать вам конкретный вопрос. Спасибо

Мне нужно открыть файл для чтения и записи, из которого я читаю и записываю блоки по 512 байт. Файл имеет фиксированную длину, и записываемая информация будет перекрываться с другой существующей. Например, я читаю первые 512 байт файла и, если он содержит определенные значения, записываю блок 512 в позицию 2048. Я пытался использовать FileInputStream и FileOutputStream, но каждый раз, когда я открываю FileOutputStream, содержимое файла удаляется. Это можно сделать с помощью Java?

Роберто


person Old-fashioned-dev    schedule 18.12.2015    source источник


Ответы (1)


Используйте FileChannel; он разрешает произвольный доступ к любой части файла, для чтения, записи или любой комбинации того и другого.

Пример:

final Path path = Paths.get("path/to/the/file");
final FileChannel channel = FileChannel.open(path, relevantOptions);

По желанию после этого можно использовать метод .map().

person fge    schedule 18.12.2015
comment
Спасибо за подсказку, я не знал FileChannel. Однако я вижу в Интернете несколько примеров, когда мне сначала нужно открыть файл с помощью RandomAccessFile. - person Old-fashioned-dev; 18.12.2015
comment
Так было с Java 6; не с Java 7+, см. мой пример кода. - person fge; 18.12.2015