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

时间:2011-04-26 06:17:40

标签: java inputstream textinput fileinputstream

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

  

我,你叫什么名字。

现在我想写

  

阿布舍克巴克

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

5 个答案:

答案 0 :(得分:11)

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

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

有时将整个文件一次性读入内存可能更简单 - 这取决于您正在尝试做什么,以及文件有多大。

答案 1 :(得分:7)

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

答案 2 :(得分:3)

一般来说,您需要读取旧文件,修改内存中的内容并再次将其写回。

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

答案 3 :(得分:2)

您有三种选择:

  1. 使用RandomAccessFile可以使用的足够空间填充原始条目(并且您不关心一些额外的尾随空间。简单但有限的实用程序
  2. 如果你这么做的话,请使用模板引擎(StringTemplate,Velocity等)。如果你这样做一次,可能会有太多的工作。
  3. 编写自己的简单模板引擎,将其读入内存中进行正则表达式替换并将其写回。效率不是很高,但如果你的使用非常简单和有限,也许是最好的妥协。

答案 4 :(得分:2)

我设法使用RandomAccessFile:

enter image description here

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