我正在制作一款游戏,我想将高分存储在一个文件中,以便在需要时读取它。我想使用BufferedWriter和BufferedReader像这样在gameover类。
File fi = new File("score.txt");
BufferedWriter w = new BufferedWriter(new FileWriter(fi));
BufferedReader r = new BufferedReader(new FileReader(fi));
所以每当我得到一个分数时,我会将其与文件中的分数进行比较,如果分数大于文件中的分数,我会将其作为高分存储到文件中,因此新的高分将在文件中更新。但问题是每次我运行程序时score。txt得到的值都是空值,这意味着它没有存储之前的值,它每次都被重置。也许是因为我正在使用新的FileWriter?我不知道该怎么做。
如果我使用(fi, true),分数是这样存储的- 04060100,这意味着第一行不去任何地方,所有的分数都只写在第一行但我需要将分数存储在第一行,这样我就可以读取第一行,高分不能是多个,对吗?
该怎么办?我是Java文件存储系统的新手。
好吧,我尽量让你明白。听着,我只想把最高分存储到那个文件中。一开始程序运行时,分数是0,对吧?因此score.txt文件的第一行将为0。好吧?玩了一场游戏后假设我得到了50分,显然50大于0,那么score。txt文件的第一行就会是50而不是0。现在我又玩了一次游戏,得到了30分,这个分数不大于50,所以txt文件还是一样,它在第一行包含了最高分,也就是50分。当我得到100分时,txt将存储这100分。明白了吗?
是的…这是一个更清晰的解释你想做什么,而不是你在原来的问题中所写的。(如果你一开始就解释清楚了就好了……)
解决方案是不打开文件写入,直到你知道它需要被写入。逻辑应该是:
- 打开文件读取
- 读取高分行
- 如果当前得分大于高分
- 打开文件写入
- 写新高分
- 。
你的代码目前所做的是在你甚至读文件之前打开以写入。这将截断文件,因此当您尝试读取当前的高分时,信息已经被丢弃了。
注意,这不是BufferedWriter
或BufferedReader
的问题。损坏是通过调用FileWriter
构造函数来完成的。(javadoc应该对此进行解释。)