3

私のプログラムでは、プレーヤーがスコアを送信すると、それは。というローカルテキストファイルに追加されますlocalHighScores。これは、その特定のデバイスでプレーヤーが達成した上位5つのスコアのリストです。

FileOutputStream(知っている場合は共有してください)を使用して改行を書き込む方法がわからなかったため、代わりに各スコアの間にスペースを入力しました。したがって、私がやろうとしているのは、プレーヤーがsubmitプログラムをクリックするとファイルが開き、現在のデータが保存されていることを読み取ることです。それをに保存しますString Array。各要素はテキストファイルの5つのスコアの1つであり、ファイルの「スペース」にヒットすると、読み取ったばかりのスコアが書き込み配列要素に追加されます。

私が現在持っているコードは次のとおりです。

    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プログラミングの1年生で、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」のようなメソッドを作成し、tostringメソッドを使用して出力します。以下のようなプリントストリームでファイルに挿入します。

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のドキュメントは素晴らしいです!FYI SharedPreferencesは、これを行うための最良かつ最高の方法ではないかもしれません...しかし、私はすべて、学習者としてのラピッドプロトタイピングを望んでいます。必要に応じて、SharedPreferencesの周りにラッパークラスを記述します。

于 2013-02-06T00:09:42.730 に答える