【问题标题】:Is there a way to use Java PrintWriter to write to a specific line?有没有办法使用 Java PrintWriter 写入特定行?
【发布时间】:2014-05-09 11:56:47
【问题描述】:
我有一个 Java 程序,它使用 PrintWriter 使用大量 .println() 语句将文本写入文件,一切正常。
我想知道的是:有没有办法写入输出文件中的特定行?
例如
如果我的程序使用 10 个 .println() 语句将 10 行写入输出文件。
有没有一种方法可以在我的程序结束时告诉它在文件中的第 3 行文本中写入一行,然后将剩余的 7 行向下移动一行,以便为新的第 3 行腾出空间?
任何帮助将不胜感激,
提前致谢,
斯蒂芬。
【问题讨论】:
标签:
java
file-io
printwriter
println
【解决方案1】:
你可以这样做,但你必须这样做。
最简单的解决方案是使用您需要的额外行重写文件。
或者使用RandomAccessFile,可以搜索第三行,将文件中的所有数据复制下来,插入要添加的行。
【解决方案2】:
不,PrintWriter 只能覆盖文件或追加到文件末尾。
如果您“覆盖”一行,则新行的长度可能与原始行不同,因此该行后面的所有内容都必须移动,而 PrintWriter 无法做到这一点。
【解决方案3】:
不仅 PrintWriter 不能做到这一点。所有其他 Writers 和 OutputStreams 也不能这样做。甚至随机访问通道都无法做到(单独)。
这是因为“一行”没有特定的长度。此外,如果你想插入一些东西,你必须移动它后面的所有东西。
您可以做的是重新定位流并覆盖那里的内容。