我有一个文本文件。我只想修改该文件中某处的一行。我不想覆盖文件的其他行(在大文件上非常慢)。
我不是指可以在末尾“添加”行的附加模式;而是“编辑”。
您可以使用 RandomAccessFile 执行此操作。你更改更改第一行的内容。
您不能做的是插入或删除任何字节,因为这需要您从执行此操作的位置转移所有数据。(如果这接近文件的末尾,它可能比重写所有内容要快得多)
RandomAccessFile 也很难使用,char
因为它是为与byte
s一起使用而设计的
您的标题说明“某行” - 您的问题正文说明“第一行”。修改第一行要简单得多,因为您不需要找到该行的起始字节。您可以使用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();
}
}