0

我有一个文本文件。我只想修改该文件中某处的一行。我不想覆盖文件的其他行(在大文件上非常慢)。

我不是指可以在末尾“添加”行的附加模式;而是“编辑”。

4

3 回答 3

3

您可以使用 RandomAccessFile 执行此操作。你更改更改第一行的内容。

您不能做的是插入或删除任何字节,因为这需要您从执行此操作的位置转移所有数据。(如果这接近文件的末尾,它可能比重写所有内容要快得多)

RandomAccessFile 也很难使用,char因为它是为与bytes一起使用而设计的

于 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 回答