La única forma de hacerlo es mover los bytes que están actualmente en el camino. Dependiendo de la frecuencia con la que tenga que hacer esto y del tamaño del archivo, a menudo es una mejor idea crear un nuevo archivo, copiar el archivo existente e insertar los nuevos bytes en el camino.
Si necesita actualizar el archivo con poca frecuencia, o que es pequeño (hasta quizás 100 kb) se puede utilizar un RandomAccessFile:
- Extender el archivo, utilizando el método
setLength()
, añadiendo el número de bytes que Estaremos insertando a lo que devuelve el método length()
.
- Si tiene suficiente memoria, cree un
byte[]
que contendrá todos los bytes desde el punto de inserción hasta el final del archivo.
- llamada
seek()
a posicionar en el punto de inserción
- llamada
readFully()
para llenar su matriz temporal
- llamada
seek()
a posicionar en el punto de inserción + el número de bytes para insertar
- llamada
write()
para escribir su memoria intermedia en ese punto
- llamada
seek()
para reposicionar en el punto de inserción
- llamada `escritura() para escribir el nuevo bytes
Si no puede crear una matriz lo suficientemente grande en el paso 2, tendrá que realizar los pasos 3 a 6 en un bucle con un búfer más pequeño. Usaría al menos un buffer de 64k para la eficiencia.
http://stackoverflow.com/questions/181408/best-way-to-write-bytes-in-the-middle-of-a-file-in-java – gtgaxiola
Ya intenté, desafortunadamente mi implementación no agrega bytes pero borre los bytes existentes, ¿cuál es el truco para insertar realmente? –
@gtgaxiola: Eso no funcionará porque sobrescribirá los bytes existentes –