Я создал файл, используя java.io.File
, FileInputStream & FileOutputStream
. Предположим, что я хочу изменить значение некоторых байтов в файле (например, с 15-го на 35-й байт) без изменения размера файла. Я попытался создать объект RandomAccessFile
, а затем использовать RandomAccessFile.seek
для перехода к байту номер 15, записи новых байтов и закрытия файла. Файл изменил свой размер. Что не так с этим подходом, и как это можно сделать успешно?
Как перезаписать некоторые байты в файле?
comment
Да, пожалуйста, покажите нам фрагмент кода, который вы используете.
- person jjnguy   schedule 19.11.2010
comment
Я предполагаю, что вы не пытаетесь одновременно использовать FileOutputStream и RandomAccessFile.
- person Peter Lawrey   schedule 19.11.2010
comment
Если вы используете только RandomAccessFile, единственный способ изменить его размер — использовать setLength(). Если вы не используете это, размер не должен меняться.
- person Peter Lawrey   schedule 19.11.2010
comment
@Питер, если вы напишете дальше конца, размер также увеличится.
- person Marcus Adams   schedule 19.11.2010
comment
@Peter Питер Ты ошибся. Благодаря тебе я исправил. Большое спасибо.
- person Blackbelt   schedule 19.11.2010
comment
Если вам приходится много возиться с файлом, взгляните на Apache Common IO: commons.apache.org/io
- person Aerosteak   schedule 21.11.2010
Ответы (1)
Вы уверены, что записываете байт в RandomAccessFile? Если вы вызываете метод:
file.write(35);
Затем он фактически записывает 35
как int
, что составляет 4 байта. Если вы хотите написать один байт, попробуйте:
file.writeByte(35);
person
DaveJohnston
schedule
19.11.2010