Лучший способ записать байты в середине файла на Java

Как лучше всего записывать байты в середине файла с помощью Java?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
17
0
14 695
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Используйте RandomAccessFile

В руководстве, на которое есть ссылка, на самом деле не упоминается класс RandomAccessFile. Может, вместо этого: tutorials.jenkov.com/java-io/randomaccessfile.html

AndrewR 13.03.2012 05:01

Откройте файл в режиме записи, не обрезая его, найдите желаемое смещение и запишите желаемые данные. Просто будьте осторожны с текстовым / двоичным режимом.

Ответ принят как подходящий

Чтение и запись в середине файла так же просто, как использование RandomAccessFile в Java.

RandomAccessFile, несмотря на свое название, больше похож на InputStream и OutputStream и меньше на File. Это позволяет вам читать или искать через bytes в файле, а затем начинать запись в те байты, на которых вы хотите остановиться.

Как только вы откроете для себя этот класс, им будет очень легко пользоваться, если у вас есть базовые представления о обычном файловом вводе-выводе.

Небольшой пример:

public static void aMethod(){
    RandomAccessFile f = new RandomAccessFile(new File("whereDidIPutTHatFile"), "rw");
    long aPositionWhereIWantToGo = 99;
    f.seek(aPositionWhereIWantToGo); // this basically reads n bytes in the file
    f.write("Im in teh fil, writn bites".getBytes());
    f.close();
}

что делать, если я не знаю позицию или у меня есть сотни файлов, в которые мне нужно вставить данные в их середину после определенного текста?

VENKI 20.01.2012 19:39

Если вы не знаете позицию, то вам нужно открыть файл и прочитать его, чтобы найти, куда нужно писать.

jjnguy 20.01.2012 21:27

мой файл "file.txt" содержит текст типа "привет, как ты (новая строка) я в порядке, спасибо" теперь я хочу вставить "находятся" в середине текста, что мне нужно сделать? при этом имейте в виду, что мы работаем с большим количеством файлов

VENKI 21.01.2012 11:35

Обратите внимание, что RandomAccessFile перезапишет текущее содержимое файла из aPositionWhereIWantToGo

super1ha1 29.03.2016 18:47

Я считаю, что лучше каждый раз создавать фрагменты файлов. И когда файл загрузится, соедините их вместе. Сейчас работаю над этим.

Другие вопросы по теме