The only way to do this is to movethe bytes that are currently in the way. Depending on how frequently you have to do this, and how large the file is, it's often a better idea to create a new file, copying the existing file and inserting the new bytes along the way.
If you need to update the file infrequently, or it's small (up to maybe 100 kb) you can use a RandomAccessFile:
- Extend the file, using the
setLength()
method, adding the number of bytes you'll be inserting to whatever is returned by the length()
method.
- If you have enough memory, create a
byte[]
that will hold all the bytes from the insertion point to the previous end of file.
- Call
seek()
to position at the insertion point
- Call
readFully()
to fill your temporary array
- Call
seek()
to position at the insertion point + the number of bytes to insert
- Call
write()
to write your buffer at that point
- Call
seek()
to reposition at the insertion point
- Call `write() to write the new bytes
If you can't create a large-enough array in step #2, you'll have to perform steps 3-6 in a loop with a smaller buffer. I would use at least a 64k buffer for efficiency.