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

Java 如何在文件中的特定位置写入内容,java,inputstream,textinput,fileinputstream,Java,Inputstream,Textinput,Fileinputstream,假设我有一个名为abhishek.txt的文件,其中包含以下行 我是,你叫什么名字 现在我想写作 阿披实 在“我是”之后就像我是阿披舍克一样。。 如何直接将内容写入此特定位置。一般来说,您需要读取旧文件,修改内存中的内容,然后将其重新写入 这里有很多选项,例如是一次读取全部文件,还是一次读取一小块文件,是否替换现有文件等等,但这通常是要使用的模式。您不能将数据插入文件。您可以使用RandomAccessFile覆盖特定位置的数据。但是,插入后需要更改所有数据。对于您的情况,请尝试以下方式: Fi

假设我有一个名为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();

无法将数据插入到文件中。。。文件系统(通常)不支持这种操作。通常,打开一个文件进行读取,打开另一个文件进行写入,将文件的第一部分从一个流复制到另一个流,写入额外部分,然后复制文件的第二部分

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


有时,一次性将整个文件读入内存可能更简单—这完全取决于您要执行的操作以及文件的大小。

您有三种选择:

  • 用足够的空间填充原始条目,以便可以使用RandomAccessFile(并且您不关心额外的尾随空间。简单,但实用性有限
  • 如果你经常使用模板引擎(StringTemplate、Velocity等)。如果你只做一次,可能会做太多的工作
  • 编写自己的简单模板引擎,将其读入内存,并进行正则表达式替换和写回。效率不是特别高,但如果使用非常简单和有限,可能是最好的折衷方案

  • 我使用RandomAccessFile成功地做到了这一点:

    这样,您将得到一个文件,其中完全包含预期的“我是阿披舍克”内容。
    即使第一行之后有内容,也可以这样做,您希望将其保留在文件中(这是我最初的问题:我有一个大文件,必须在某个字符串之后插入一些内容)不要在文件末尾写,这样更容易。

    请避免发布截图,即使突出显示了语法。截图会阻止残疾人(使用屏幕阅读器)理解内容。也会阻止普通人复制/粘贴代码的相关部分