0

ファイルに書き込んでいる一連の文字列があります。

private void writeScoreToFile(BlastScore result)
    {
        try{
            FileWriter fstream = new FileWriter(getFilesDir() + CaptureActivity.BLAST_SCORES,true);
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(Integer.toString(result.getBlastScore()));
            out.close();
        }catch (Exception e){
            System.err.println("Write Error: " + e.getMessage());
        }
    }

リストとして読み返したいと思います。

private List<String> getArrayFromFile(String filename) throws IOException
    {
        FileReader fileReader = new FileReader(getFilesDir() + filename);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        List<String> lines = new ArrayList<String>();
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            lines.add(line);
        }
        bufferedReader.close();
        return lines;
    }

書かれているリストは次のとおりです。

100
96
100
96
100

リストを印刷すると、次のようになります

10-28 21:22:31.130: I/System.out(936): Last Score: 1009610096100

これを印刷するために使用しているコードは次のとおりです。

try {
            List<String> blastScores = getArrayFromFile(CaptureActivity.BLAST_SCORES);
            System.out.println("Last Score: " + blastScores.get(blastScores.size()-1));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.err.println("Read Error: " + e.getMessage());
        }

n-1 要素を取得しようとしています。

何が間違っているのかわかりません。

4

3 に答える 3

0

あなたのwriteScoreToFile関数では、書かれている各スコアを区切る改行や区切り文字は見当たりません。

その場合、ファイルは実際1009610096100には 1 行に含まれ、内部のループgetArrayFromFileは 1 回だけ実行されます。

while ((line = bufferedReader.readLine()) != null) {
   lines.add(line);
}

したがって、あなたList<String>には1つの要素しか含まれておらず、コードblastScores.get(blastScores.size()-1)は最後で唯一の要素を取得し1009610096100ます。

于 2011-10-28T21:43:51.853 に答える
0

スコアを書き込むコードは次を使用します

out.write(Integer.toString(result.getBlastScore()));

これは、メソッドがスコア 12、100、および 2 で呼び出された場合、ファイルは次のようになることを意味します。

121002

区切りを書かないからです。これをどのように 3 つの数値に正しく解析しますか?

PrintWriterをラップする aをBufferedWriter使用し、そのprintlnメソッドを使用してスコアを書き込みます。

ファイルを開いて閉じるたびにスコアを 1 つずつ書き込むのは、それほど高速ではないことに注意してください。ところで、単一の整数を書き込むためだけに BufferedWriter を使用しても、何のメリットもありません。また、例外処理が不適切です。ストリームとリーダー/ライターは、常にfinallyブロックで閉じる必要があります。

于 2011-10-28T21:34:38.757 に答える
0

整数または整数文字列を書いているときは、各出力の後に改行文字を入れていません。したがって、ファイルには 1 行のデータしかなく、その行は連続した文字列として取得されます... 修正するには、個別の write() 呼び出しの間に write.newLine() のような行区切りを追加します。

于 2011-10-28T21:37:19.777 に答える