将文本附加到特定位置的现有文件

Appending text to an already existing file at a specific location

我正在为一个项目编写游戏,进展顺利,但我有一个小问题,它使用文本文件来保存程序关闭后解锁了哪些成就,我不知道如何编辑它。虽然我可以使用一些检查来重写整个东西以查看已解锁的内容,然后使用 if else 语句将 Y 放入重写中,然后替换它,但这将需要大量代码行并且不如在点写成就,虽然不是那么糟糕,但可能比将所需行的文本替换到文本文件中更耗费资源。

所以给定这个结构(数字附在成就上,下面的字母告诉我的程序它是否解锁,N 表示没有 Y 表示是)如果我解锁了成就 2,例如,我将如何搜索文本文件看起来像这样...

01
N
02
N
03
N
04
N
05
N
06
N
07
N
08
N
09
N
10
N
11
N
12
N

for 02 然后使用 java 1.8 代码将下面的行从 N 编辑到 Y。 (该文件名为 Achievements.txt,我有一个名为 longPath 的变量,它是存储游戏的动态目录,因此出于示例代码的目的,该目录将作为

(longPath+"\Achievements.txt")

例如

Scanner scan = new Scanner(new File(longPath+"\Achievements.txt"));

是我用来确定解锁哪些成就的代码的开头(顺便说一句,扫描器代码工作正常)

编辑:重写文件不太可行,我现在要睡觉了,所以我会在东部时间明天早上 8:10 回复

试试看这篇文章:https://www.mkyong.com/java/how-to-append-content-to-file-in-java/

根据它,当您实例化一个新的 FileWriter class 时,有一个构造函数,您可以在其中将布尔值设置为 'true' 以便它附加到文件而不是覆盖它.

例如:

File file = new File(longPath+"\Achievements.txt");
FileWriter fw = new FileWriter(file, true);
fw.write("This string should append to the end of the file");

我目前无法对此进行测试。

如果您只是简单地将 N 替换为 Y,即不写入额外信息,那么 RandomAccessFile 应该适合您

有关 writeChars

的示例,请参阅此 link