如何写在特定位置的内容在文件中

如何写在特定位置的内容在文件中

问题描述:

假设我有一个名为abhishek.txt文件和包含以下行如何写在特定位置的内容在文件中

我,什么是你的名字。

现在我想写

阿布舍克

“我是”像我阿布舍克.. 如何直接在此特定位置的内容写了。

您不能将数据插入到文件中。您可以使用RandomAccessFile覆盖特定位置的数据。但是插入需要更改后面的所有数据。对于你的情况下,尝试这样的事情,而不是:

File file = new File("abhishek.txt"); 
Scanner scanner = new Scanner(file).useDelimiter("\n"); 
String line = scanner.next(); 
String newLine = line.substring(0, 5) + "Abhishek" + line.substring(5); 
FileWriter writer = new FileWriter(file); 
writer.write(newLine); 
writer.close(); 

一般而言,您需要读取旧文件,修改内存中的内容并将其重新写回。

这里有很多选择,关于你是一次读取文件还是一次读取一小段文件,无论是替换现有的文件等,但这通常是使用的模式。

你不能将数据插入文件...文件系统(一般)根本不支持这样的操作。通常情况下,您会打开一个文件进行读取,另一个文件进行写入,将文件的第一部分从一个流复制到另一个文件,写入额外部分,然后复制文件的第二部分。

如果您要替换原始文件,则需要将其删除并将新文件移到原位。

有时将整个文件一次读入内存可能会更简单 - 这取决于您想要做什么以及文件的大小。

你有三种选择:

  1. 垫的原始入口有足够的空间,RandomAccessFile中都可以使用(你不关心一些额外的尾随空格容易,但效用有限
  2. 使用。模板引擎(StringTemplate,Velocity等),如果你这样做了很多,可能工作太多,如果你这样做只是一次
  3. 编写你自己的简单模板引擎,将它读入内存做一个正则表达式替换并写入它不是特别有效,但如果你有非常简单和有限的使用,也许是最好的妥协即

我设法用RandomAccessFile的做到这一点:

enter image description here

有了这个,你得到完全包含文件的预期“我阿布舍克”的内容。 即使您在第一行之后想要保留在文件中的内容(这是我最初的问题:我有一个大文件,并且必须在某个字符串之后插入一些内容),而不是写在文件的结尾,这更容易。