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

假设我有一个名为abhishek.txt的文件,其中包含以下行

我,你叫什么名字。

现在我想写

阿布舍克

在“我”之后,就像我是Abhishek,..如何直接在这个特定位置写出内容。

您无法将数据插入文件。 您可以使用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:

在此处输入图像描述

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