【问题标题】:Appending text to an already existing file at a specific location将文本附加到特定位置的现有文件
【发布时间】:2024-01-18 19:51:01
【问题描述】:

我正在为一个项目编写一个游戏,它进展顺利,但我有一个小问题,它使用文本文件保存程序关闭后已解锁的成就,我不知道如何编辑它.虽然我可以使用一些检查来重写整个事情以查看已解锁的内容,然后使用 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

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

(longPath+"\\Achievements.txt")

例如

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

是我用来在代码中确定解锁哪些成就的代码的开头(顺便说一句,扫描仪代码工作得很好)

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

【问题讨论】:

  • 没什么,因为我发现的所有内容都是为了在文件末尾添加文本,例如,对我来说,删除 02 之前的所有内容并重写几乎与完全重写文件并替换一样糟糕每次解锁成就@Scary Wombat
  • 你为什么要保存未解锁的成就。你可以简单地只存储一个解锁的成就,如果你在文件中没有找到它没有解锁的成就。
  • 因为扫描仪结构逐行进行,第一行将第 2 行的 Y 或 N 附加到成就等等,如果我没有存储所有这些,理论上我可以在解锁时添加它们,但是我用于解锁的结构会有很多空指针异常,所以需要做很多工作,但这是一个可行的答案@Sebastian Walla
  • 我会采用重写整个文件的方法——你为什么认为它不好?这个文件有多大?
  • 它只有示例那么大,但我不能只使用\n,因为文本文件实际上包含\n,我必须使用看起来像这样的结构 writer.write(" 01"); writer.newLine(); writer.write("N"); writer.newLine(); writer.write("02"); writer.newLine(); writer.write("Y"); writer.newLine();...(其中 24 行,加上初始化行和 if/else 包装每个打印的“N”或“Y”)@ScaryWombat

标签: java netbeans io java-8 netbeans-8


【解决方案1】:

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

据此,当您实例化一个新的 FileWriter 类时,有一个构造函数,您可以在其中将布尔值设置为“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");

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

【讨论】:

  • 感谢您的宝贵时间,但这正是我一直在寻找的。我需要能够在文件中间写作:|如果你知道怎么做,那就是我需要的。 @一种。库奇
【解决方案2】:

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

查看link 获取 writeChars 的示例

【讨论】: