3

在我的程序中,当玩家提交分数时,它会被添加到名为localHighScores. 这是玩家在该特定设备上获得的前五名的列表。

我不知道如何使用(如果你知道请分享)写入新行FileOutputStream,所以我在每个分数之间输入了一个空格。因此,我想要做的是当玩家点击submit程序将打开文件并读取保存的任何当前数据。它将它保存到一个String Array,每个元素都是文本文件中的五个分数之一,当它在文件中点击一个“空格”时,它会将刚刚读取的分数添加到写入数组元素中

我目前拥有的代码如下:

    String space = "  ";
    String currentScoreSaved;

    String[] score = new String[5]; 

    int i = 0;
    try
    {           
        BufferedReader inputReader = new BufferedReader(new InputStreamReader(openFileInput("localHighScore.txt")));
        String inputString;StringBuffer stringBuffer = new StringBuffer();

        while ((inputString = inputReader.readLine()) != null && i < 6)
        {
            if((inputString = inputReader.readLine()) != space)
            {
                stringBuffer.append(inputString + "\n");
                i++;
                score[i] = stringBuffer.toString();
            }
        }
        currentScoreSaved = stringBuffer.toString();
        FileOutputStream fos = openFileOutput("localHighScore.txt", Context.MODE_PRIVATE);

        while (i < 6)
        {
            i++;

            fos.write(score[i].getBytes());
            fos.write(space.getBytes());

        }       
        fos.write(localHighScore.getBytes());
        //fos.newLine(); //I thought this was how you did a new line but sadly I was mistaken

        fos.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();            
    }

现在您会注意到,如果达到新的高分,这不会重新排列分数。我计划下一步做的事情。目前,我只是想让程序执行在当前数据中读取的主要内容,将其粘贴到数组中,然后将其与新分数一起打印回该文件

任何想法这可能如何工作,因为目前即使我事先在文本文件中得分,它也没有打印任何内容

4

2 回答 2

1

我只是 Java 编程的一年级学生,而且我是 stackoverflow.com 的新用户,所以如果 android 编码有一些我不知道的特殊规则,请原谅我,这会阻止这个简单而谦逊的示例工作. 但这是我以最简单的方式从文件中读取的方式。

File tempFile = new File("<SubdirectoryIfAny/name_of_file.txt");

Scanner readFile = new Scanner( tempFile );

// Assuming that you can structure the file as you please with fx each bit of info
// on a new line.

int counter = 0;
while ( readFile.hasNextLine() ) {
    score[counter] = readFile.nextLine();
    counter++;
}

至于写回文件?将它放在一个完全不同的方法中,并简单地制作一个简化的 toString 类方法,以您希望它们在文件中的确切方式打印出所有值,然后创建一个类似“loadToFile”的方法并使用 to string 方法打印回来使用打印流进入文件,如下所示。

File tempFile = new File("<SubdirectoryIfAny/name_of_file.txt");

PrintStream write = new PrintStream(tempFile);

// specify code for your particular program so that the toString method gets the 
// info from the string array or something like that.

write.print( <objectName/this>.toStringLikeMethod() );
// remember the /n /n in the toStringLikeMethod so it prints properly in the file.

同样,如果这是您已经知道的事情,在这种情况下这是不可能的,请忽略我,但如果不是,我希望它有用。至于例外情况,您可以自己计算。;)

于 2013-02-05T22:50:55.680 回答
0

由于您是初学者,并且我假设您正在尝试尽快完成任务,因此我建议您使用SharedPreferences. 基本上它只是一个供您使用的巨大持久地图!话虽如此...您应该真正了解Android中的所有存储方式,因此请查看此文档:

http://developer.android.com/guide/topics/data/data-storage.html

Android 文档很棒!仅供参考,SharedPreferences 可能不是做到这一点的最好和最棒的方法......但我完全赞成作为学习者的快速原型设计。如果需要,可以围绕 SharedPreferences 编写一个包装类。

于 2013-02-06T00:09:42.730 回答