0

文字列のみがカンマで区切られ、String[] に変換する必要がある、非常に単純な csv しか読み取っていないためです。

これはとても簡単だと思っていましたが、外部ジャーは少し多すぎて、とても簡単に扱うことができました。しかし、何が起こるかというと、メモリがいっぱいになってクラッシュするまで、最初の項目が追加されるということです!

public List readWinkels(アクティビティ a){ List winkelList = new ArrayList();

        try{
            InputStream winkelcsv =  a.getResources().getAssets().open("winkels.csv");

            BufferedReader br = new BufferedReader(new InputStreamReader(winkelcsv, "UTF-8"));
            String s  = br.readLine();
            while (s != null){
                winkelList.add(s);
                System.out.println(s.toString());
            }

            br.close();
            for(int i =0;i<winkelList.size();i++) {
                System.out.println(winkelList.get(i));
                }
        }catch(IOException ioe){
            ioe.printStackTrace();
        }

        return winkelList;

これが私のコードです....なぜそれが機能しないのかわかりません。誰か助けてもらえますか? readline が行を読み取り、読み取りポイントが次の行にジャンプする (私は思う) のに、なぜ最初の行が無数に追加されるのでしょうか?

4

1 に答える 1

2

ループを使用してファイルの行を反復処理するための標準的なイディオムをwhileコードに適用すると、次のようになります。

String s;
while ((s = br.readLine()) != null){
    winkelList.add(s);
    System.out.println(s.toString());
}

readLine()ループの繰り返しごとに呼び出す必要があります。元のコードは、s一度しか読み込まれないため、無限ループに他なりません。sis が notであると仮定するとnull、ループ条件が false になることは決してないため、使用可能なすべてのメモリが使用されるまで、リストは際限なく大きくなります。

于 2013-02-24T18:36:26.083 に答える