Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更新现有文本文件的编号?_Java - Fatal编程技术网

Java 如何更新现有文本文件的编号?

Java 如何更新现有文本文件的编号?,java,Java,这是我的密码: 程序询问用户的姓名 然后它生成随机的数学问题,统计正确答案和错误答案 正确答案的用户将获得0.05美元的奖励,错误答案的用户将受到0.03美元的惩罚 以上所有工作都已完成 我被困在从这里开始: 将使用它们的名称创建一个文件 他们得到正确/不正确答案的数量被记录到文本文件中 如果已经存在以其名称命名的文件,我必须将其结果与文件上的结果相结合 现有文本文件的示例: Correct answers: 1 Incorrect answers: 0 Earnings: $0.05

这是我的密码:

程序询问用户的姓名

然后它生成随机的数学问题,统计正确答案和错误答案

正确答案的用户将获得0.05美元的奖励,错误答案的用户将受到0.03美元的惩罚

以上所有工作都已完成

我被困在从这里开始:

将使用它们的名称创建一个文件

他们得到正确/不正确答案的数量被记录到文本文件中

如果已经存在以其名称命名的文件,我必须将其结果与文件上的结果相结合

现有文本文件的示例:

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循环中。似乎不起作用。我在正确的轨道上吗?那不行,因为正文的其余部分也在同一行。我已经为你更新了我的答案。