L'unico modo per farlo è spostare i byte che sono attualmente nel modo. A seconda della frequenza con cui si esegue questa operazione e di quanto è grande il file, è spesso consigliabile creare un nuovo file, copiare il file esistente e inserire i nuovi byte lungo la strada.
Se è necessario aggiornare il file di rado, o è di piccole dimensioni (fino a forse 100 kb) è possibile utilizzare una RandomAccessFile:
- estendere il file, utilizzando il metodo
setLength()
, aggiungendo il numero di byte che si inserirò tutto ciò che viene restituito dal metodo length()
.
- Se si dispone di memoria sufficiente, creare uno
byte[]
che manterrà tutti i byte dal punto di inserimento alla fine del file precedente.
- chiamata
seek()
per posizionare nel punto di inserimento
- chiamata
readFully()
per riempire l'array temporaneo
- chiamata
seek()
per posizionare nel punto di inserimento + il numero di byte da inserire
- chiamata
write()
per scrivere il buffer a quel punto
- chiamata
seek()
per riposizionare nel punto di inserimento
- chiamata `write() per scrivere il nuovo byte
Se non è possibile creare una matrice sufficientemente grande al punto 2, è necessario eseguire i passaggi 3-6 in un ciclo con un buffer più piccolo. Vorrei usare almeno un buffer da 64k per l'efficienza.
http://stackoverflow.com/questions/181408/best-way-to-write-bytes-in-the-middle-of-a-file-in-java – gtgaxiola
Già provato, sfortunatamente la mia implementazione non aggiunge byte ma cancella i byte esistenti, qual è il trucco per l'inserimento effettivo? –
@gtgaxiola: Non funzionerà perché sovrascriverà i byte esistenti –