Java 如何将文件中的数字增加一个数量?

Java 如何将文件中的数字增加一个数量?,java,io,Java,Io,我有一个.txt文件,用来存储玩家的钱。我需要这个文件来增加或损害一定数量,这取决于玩家是否杀了什么东西,或者他们是否从商店买了什么东西 问题是,我不知道如何实际增加或损害内容。我可以用新的钱删除/重新创建.txt文件,但是由于多个线程将访问该文件,因此该文件可能不存在,因为它已被删除且尚未重新生成 只是澄清一下,一次只会有一个线程修改文件。其他线程将只读取该文件 那么,在不首先删除数据/文件的情况下,我如何做到这一点呢?有一个带有队列的单例数据访问器,这样它就是唯一一个操作文件的访问器。如有必

我有一个.txt文件,用来存储玩家的钱。我需要这个文件来增加或损害一定数量,这取决于玩家是否杀了什么东西,或者他们是否从商店买了什么东西

问题是,我不知道如何实际增加或损害内容。我可以用新的钱删除/重新创建.txt文件,但是由于多个线程将访问该文件,因此该文件可能不存在,因为它已被删除且尚未重新生成

只是澄清一下,一次只会有一个线程修改文件。其他线程将只读取该文件


那么,在不首先删除数据/文件的情况下,我如何做到这一点呢?

有一个带有队列的单例数据访问器,这样它就是唯一一个操作文件的访问器。如有必要,在写入后向客户端线程确认。

以下是代码,请先读取文件,然后对其进行递增,然后再次存储-

   BufferedWriter out = null;
    try {

        // Read File Contents - score
        BufferedReader br = new BufferedReader(new FileReader("c:\\a.txt"));
        String storedScore="0";
        int storedScoreNumber = 0;
        while ((storedScore = br.readLine()) != null) {
            storedScoreNumber=(Integer.parseInt(storedScore==null?"0":storedScore));
        }

        // Write File Contents - incremented socre
        out = new BufferedWriter(new FileWriter("c:\\a.txt", false));
        out.write(String.valueOf(storedScoreNumber+1));

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (out != null) {
            try {
                out.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

你不能在程序运行时将文件内容保存在内存中,而只能在程序启动/关闭时从文件中写入/读取吗?@user3580294因为我的游戏处于早期测试阶段,会有很多漏洞和bug导致服务器崩溃。我确实在另一个我正在开发的游戏中将它保存到了内存中,但是即使它非常罕见,当服务器崩溃时,玩家可能会失去几天的工作。我宁愿在不可能失去的地方拥有它,也不愿有机会失去它。我明白了。。。如果定期写入磁盘不起作用,也许可以检查一下?我想,你的游戏是一个网络游戏。考虑使用数据库,而不是将统计数据存储在文件中。@Krumia在主帖子中添加了“为了澄清,一次只有一个线程修改该文件。其他线程将只读取该文件。”。我不会从多个线程修改它,因为玩家一次只能登录(如果不存在则创建文件)、在战斗(为了钱杀人)和在商店(购买物品)。因此,虽然多个线程都有代码来修改文件,但在任何时候实际上只有一个线程在修改它。其他人只是在读它。在一个文件中写一个数字不会花那么多时间,所以在你的情况下,我不认为没有线程同步的风险太大。在几分之一秒的时间里,其他用户将获得新的价值。出于某种原因,它意味着给这个人“50”钱,但如果给3950?现在是3950,然后是7000或者类似的?我勒个去?