Java 如何更新现有文本文件的编号?
这是我的密码: 程序询问用户的姓名 然后它生成随机的数学问题,统计正确答案和错误答案 正确答案的用户将获得0.05美元的奖励,错误答案的用户将受到0.03美元的惩罚 以上所有工作都已完成 我被困在从这里开始: 将使用它们的名称创建一个文件 他们得到正确/不正确答案的数量被记录到文本文件中 如果已经存在以其名称命名的文件,我必须将其结果与文件上的结果相结合 现有文本文件的示例:Java 如何更新现有文本文件的编号?,java,Java,这是我的密码: 程序询问用户的姓名 然后它生成随机的数学问题,统计正确答案和错误答案 正确答案的用户将获得0.05美元的奖励,错误答案的用户将受到0.03美元的惩罚 以上所有工作都已完成 我被困在从这里开始: 将使用它们的名称创建一个文件 他们得到正确/不正确答案的数量被记录到文本文件中 如果已经存在以其名称命名的文件,我必须将其结果与文件上的结果相结合 现有文本文件的示例: Correct answers: 1 Incorrect answers: 0 Earnings: $0.05
Correct answers: 1
Incorrect answers: 0
Earnings: $0.05
如果用户再次运行程序并得到1个正确答案,则必须按如下方式更新:
Correct answers: 2
Incorrect answers: 0
Earnings: $0.10
public static void main(String[] args) {
validateCreditsResponse();
name();
retrieveStats();
menu();
saveStats();
}
//Reads existing text file for the user.
public static void retrieveStats() {
try (BufferedReader br = new BufferedReader(new FileReader(userName + "Stats.txt"))) {
String line;
while ((line = br.readLine()) != null) {
Matcher correctMatcher = Pattern.compile("Correct Answers:(.*)").matcher(line);
if (correctMatcher.matches()) {
correct = Integer.valueOf(correctMatcher.group(1));
}
// TODO complete other matchers
}
} catch (IOException e) {
}
}
目前,它不是更新,而是被覆盖。
如果我在开始时选择show stats,这就是结果(它使用初始化值):
我花了好几个小时试图弄明白这一点。我拒绝睡觉,直到我解决这个问题。有人请帮帮我。我将不胜感激。在检索统计数据之前,您需要阅读/中的名称,即您的主要方法如下所示:
Correct answers: 2
Incorrect answers: 0
Earnings: $0.10
public static void main(String[] args) {
validateCreditsResponse();
name();
retrieveStats();
menu();
saveStats();
}
//Reads existing text file for the user.
public static void retrieveStats() {
try (BufferedReader br = new BufferedReader(new FileReader(userName + "Stats.txt"))) {
String line;
while ((line = br.readLine()) != null) {
Matcher correctMatcher = Pattern.compile("Correct Answers:(.*)").matcher(line);
if (correctMatcher.matches()) {
correct = Integer.valueOf(correctMatcher.group(1));
}
// TODO complete other matchers
}
} catch (IOException e) {
}
}
此外,在此方法中,还需要像在“else”分支中一样输出println:
if (money > 0) {
outputfile.printf("Earnings: $%.2f", money);
// Add outputfile.println();
}
最后,在此方法中,您需要读入数据:
//Creates new text file for the user unless one already exists.
public static void retrieveStats() {
try {
writer = new FileWriter(userName + "Stats.txt", true);
outputfile = new PrintWriter (writer);
} catch (IOException e) {
}
}
您可以使用文件读取器而不是文件编写器来执行此操作
例如,在Java 8中,如下所示:
Correct answers: 2
Incorrect answers: 0
Earnings: $0.10
public static void main(String[] args) {
validateCreditsResponse();
name();
retrieveStats();
menu();
saveStats();
}
//Reads existing text file for the user.
public static void retrieveStats() {
try (BufferedReader br = new BufferedReader(new FileReader(userName + "Stats.txt"))) {
String line;
while ((line = br.readLine()) != null) {
Matcher correctMatcher = Pattern.compile("Correct Answers:(.*)").matcher(line);
if (correctMatcher.matches()) {
correct = Integer.valueOf(correctMatcher.group(1));
}
// TODO complete other matchers
}
} catch (IOException e) {
}
}
因此,首先读取现有文件,更新内存中的统计信息,然后写出新文件。@JonSkeet不幸的是,我不知道如何编写它。我早就试过了。做得不太好…提示:在你最喜欢的搜索引擎中搜索
java编写文本文件
。从这个问题上看,你似乎已经知道如何编写文件了。因此,您需要集中精力阅读文件。不幸的是,说“进展不太顺利”并不能告诉我们你尝试了什么或发生了什么。请提供一个问题中的代码(不是在另一个网站上,也不是几百行代码-只是问题的一个最小示例)。那么我应该在while循环中从文本文件中提取整数并将其添加到我的新结果中吗?如果是,我如何从文本文件中提取整数?是的。考虑使用正则表达式。我把“正确=整数。PARSETINT(行)”;在while循环中。似乎不起作用。我在正确的轨道上吗?那不行,因为正文的其余部分也在同一行。我已经为你更新了我的答案。