0

テキストファイルがあります。そのファイル内のどこかで 1 行だけを変更したい。ファイルの他の行を上書きしたくありません (大きなファイルでは非常に遅くなります)。

最後に行を「追加」できる追加モードについては言及していません。むしろ「編集」。

4

3 に答える 3

3

これは RandomAccessFile で行うことができます。最初の行の内容を変更します。

できないことは、これを行うポイントからすべてのデータをシフトする必要があるため、バイトを挿入または削除することです。(これがファイルの終わりに近い場合は、すべてを書き直すよりもはるかに高速になる可能性があります)

また、RandomAccessFile は、 scharで使用するように設計されているため、使用が困難です。byte

于 2012-08-08T14:38:13.893 に答える
2

タイトルには「特定の行」と記載されています-質問の本文には「最初の行」と記載されています。行の開始バイトを見つける必要がないため、最初の行の変更ははるかに簡単です。RandomAccessFileファイルの関連するチャンクを上書きするために使用できます。

ただし、新しい行は古い行と同じサイズ (バイト単位) である必要があります。新しい行の有用なデータが古い行よりも短い場合は、どのようにパディングするかを考える必要があります。新しい行を古い行よりも長くする必要がある場合は、代わりに新しいファイルを作成して、データを適切にコピーする必要があります。

通常、ファイル システムは、既存のファイル内での挿入または削除をサポートしていません。

于 2012-08-08T14:38:42.397 に答える
1

このようにすることができます (これは決して最適なコードではありません)。

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();
    }
}
于 2012-08-08T15:00:09.313 に答える