Der einzige Weg, dies zu tun, ist das Verschieben der Bytes, die gerade im Weg sind. Abhängig davon, wie oft Sie dies tun müssen und wie groß die Datei ist, ist es oft eine bessere Idee, eine neue Datei zu erstellen, die vorhandene Datei zu kopieren und die neuen Bytes einzufügen.
Wenn Sie die Datei selten zu aktualisieren, oder es ist klein (bis vielleicht 100 kb) Sie können ein verwenden RandomAccessFile:
- die Datei erweitern, die
setLength()
Methode verwendet, um die Anzahl von Bytes Hinzufügen Sie Einfügen in das, was von der length()
Methode zurückgegeben wird.
- Wenn genügend Speicher vorhanden ist, erstellen Sie eine
byte[]
, die alle Bytes vom Einfügepunkt bis zum vorherigen Ende der Datei enthält.
- Anruf
seek()
am Einfügepunkt
- Anruf
readFully()
zu positionieren temporären Array
- Anruf zu füllen
seek()
am Einfügepunkt + die Anzahl von Bytes positionieren
- Anruf einzufügen
write()
Ihre Puffer bei, dass zu schreiben Punkt
- Anruf
seek()
am Einfügepunkt repositionieren
- Anruf `write()
der neuen Bytes zu schreiben,
Wenn Sie in Schritt 2 kein ausreichend großes Array erstellen können, müssen Sie die Schritte 3-6 in einer Schleife mit einem kleineren Puffer durchführen. Ich würde mindestens einen 64k-Puffer für die Effizienz verwenden.
http://stackoverflow.com/questions/181408/best-way-to-write-bytes-in-the-middle-of-a-file-in-java – gtgaxiola
Bereits versucht, leider meine Implementierung nicht hinzufügen Bytes aber lösche existierende Bytes, was ist der Trick für das Einfügen? –
@gtgaxiola: Das wird nicht funktionieren, weil es die vorhandenen Bytes überschreiben wird –