テキスト ファイルを編集する簡単なプログラム (Java で作成) を作成したいと考えています。特に、テキスト ファイル内のランダムな位置に任意のテキストを挿入するプログラムを作成したいと考えています。この機能は、現在作成中の大規模なプログラムの一部です。
java.util.RandomAccessFile に関する説明を読むと、ファイルの途中で書き込み操作を実行すると、既存のコンテンツが上書きされるようです。これは、(可能であれば)避けたい副作用です。
これを実現する簡単な方法はありますか?
前もって感謝します。
ベストアンサー1
さて、この質問はかなり古いですが、FileChannels は Java 1.4 以降に存在しており、ファイル内のコンテンツの置き換えや挿入の問題を扱うときにどこにも言及されていないのはなぜかわかりません。ファイルチャネル速いので、それを使用してください。
以下に例を示します (例外やその他のものは無視します)。
public void insert(String filename, long offset, byte[] content) {
RandomAccessFile r = new RandomAccessFile(new File(filename), "rw");
RandomAccessFile rtemp = new RandomAccessFile(new File(filename + "~"), "rw");
long fileSize = r.length();
FileChannel sourceChannel = r.getChannel();
FileChannel targetChannel = rtemp.getChannel();
sourceChannel.transferTo(offset, (fileSize - offset), targetChannel);
sourceChannel.truncate(offset);
r.seek(offset);
r.write(content);
long newOffset = r.getFilePointer();
targetChannel.position(0L);
sourceChannel.transferFrom(targetChannel, newOffset, (fileSize - offset));
sourceChannel.close();
targetChannel.close();
}