【问题标题】:how to write content in a Specific position in a File如何在文件的特定位置写入内容
【发布时间】:2011-08-12 19:16:03
【问题描述】:

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

我是,你叫什么名字。

现在我要写了

阿布舍克

在“我是”之后,就像我是阿布舍克一样,.. 如何直接在这个特定位置写内容。

【问题讨论】:

    标签: java inputstream textinput fileinputstream


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        一般来说你需要读取旧文件,修改内存中的内容,然后再写回。

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

        【讨论】:

          【解决方案4】:

          我设法使用 RandomAccessFile 做到了:

          这样,您将获得一个包含预期“我是 Abhishek”内容的文件。 即使您想在文件中保留第一行之后的内容(这是我最初的问题:我有一个大文件,我必须在某个字符串之后插入一些内容),而不是写在文件末尾,这样更容易。

          【讨论】:

          • 请避免发布屏幕截图,即使语法突出显示。屏幕截图可防止残障人士(使用屏幕阅读器)理解内容。还可以防止普通人复制/粘贴代码的相关部分
          【解决方案5】:

          你有三个选择:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-03-07
            • 2013-12-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-30
            相关资源
            最近更新 更多