ファイル全体をディスクに書き直すことなく、ファイルの内容の一部を置き換えることは可能ですか? 数ギガバイトの非常に大きなファイルがあるとします。バイトを置き換える方法、ファイル全体を書き換えずに位置 100 から 200 を言うことができますか?
追加のボーナスとして、Java 1.4 以外の機能をまったく使用しないソリューションが必要です。
まったく同じバイト数を書き込もうとしていることが確実な場合は、RandomAccessFile
これを達成するために a を使用できます (Java 1.0 以降で使用可能)。ファイルを開き、必要な場所を探し、それらのバイトを新しいデータで上書きするだけです。
RandomAccessFile f = new RandomAccessFile(new File("C:\\test\\huge.txt"), "rw");
f.seek(100); // Seek ahead
f.write("here is some new stuff".getBytes())
置換する必要があるデータの量が正確にわからない場合は、同じ方法で任意のポイントでファイルから読み取ることもできます (たとえば、誤ってひどいことをしないように、書いているものをパディング/切り詰めることができます)。 )。