iph*_*ev7 8 java file-io file overwrite read-write
我逐行读取文件中的行,而我试图让这个如果我达到那个适合我的具体参数(在我的情况下,如果用某个词开头)一条线,我可以覆盖该行.
我目前的代码:
try {
FileInputStream fis = new FileInputStream(myFile);
DataInputStream in = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
if (line.startsWith("word")) {
// replace line code here
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
...这里myFile是一个File对象.
与往常一样,任何帮助,示例或建议都非常感谢.
谢谢!
mer*_*ike 14
RandomAccessFile似乎很合适.它的javadoc说:
此类的实例支持读取和写入随机访问文件.随机访问文件的行为类似于存储在文件系统中的大量字节.有一种游标或索引到隐含数组中,称为文件指针; 输入操作从文件指针开始读取字节,并使文件指针超过读取的字节数.如果以读/写模式创建随机访问文件,则输出操作也可用; 输出操作从文件指针开始写入字节,并使文件指针超过写入的字节.写入隐含数组当前末尾的输出操作会导致数组被扩展.文件指针可以由getFilePointer方法读取并由seek方法设置.
也就是说,由于文本文件是顺序文件格式,因此不能在不移动所有后续字符的情况下用不同长度的行替换行,因此替换行通常会读取和写入整个文件.如果您写入单独的文件,并在完成后重命名输出文件,这可能更容易实现.如果出现问题,这也会更加健壮,因为可以简单地重试初始文件的内容.RandomAccessFile的唯一优势是您不需要临时输出文件的磁盘空间,并且由于更好的访问位置,可能会从磁盘中获得更好的性能.
这里你最好的选择可能是将文件读入内存(类似于a StringBuilder)并将你希望输出文件的内容写入StringBuilder.完成文件读取后,您将需要StringBuilder将文件的内容写入文件.
如果文件太大而无法在内存中完成此操作,则可以始终逐行读入文件内容并将其写入临时文件而不是a StringBuilder.完成此操作后,您可以删除旧文件并将临时文件移动到其位置.
| 归档时间: |
|
| 查看次数: |
13034 次 |
| 最近记录: |