テキストファイルがあります。そのファイル内のどこかで 1 行だけを変更したい。ファイルの他の行を上書きしたくありません (大きなファイルでは非常に遅くなります)。
最後に行を「追加」できる追加モードについては言及していません。むしろ「編集」。
これは RandomAccessFile で行うことができます。最初の行の内容を変更します。
できないことは、これを行うポイントからすべてのデータをシフトする必要があるため、バイトを挿入または削除することです。(これがファイルの終わりに近い場合は、すべてを書き直すよりもはるかに高速になる可能性があります)
また、RandomAccessFile は、 schar
で使用するように設計されているため、使用が困難です。byte
タイトルには「特定の行」と記載されています-質問の本文には「最初の行」と記載されています。行の開始バイトを見つける必要がないため、最初の行の変更ははるかに簡単です。RandomAccessFile
ファイルの関連するチャンクを上書きするために使用できます。
ただし、新しい行は古い行と同じサイズ (バイト単位) である必要があります。新しい行の有用なデータが古い行よりも短い場合は、どのようにパディングするかを考える必要があります。新しい行を古い行よりも長くする必要がある場合は、代わりに新しいファイルを作成して、データを適切にコピーする必要があります。
通常、ファイル システムは、既存のファイル内での挿入または削除をサポートしていません。
このようにすることができます (これは決して最適なコードではありません)。
import java.io.*;
public class Test {
// provide the file name via the command line
public static void main(String []args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("your_file_name_here")); // used for reading the file
BufferedWriter bw = new BufferedWriter(new FileWriter("new_file_name_here.txt"));
String str = br.readLine();
while (str != null) {
// modify the line here if you want, otherwise it will written as is.
// then write it using the BufferedWriter
bw.write(str, 0, str.length());
bw.newLine();
// read the next line
str = br.readLine();
}
br.close();
bw.close();
}
}