自己的csv阅读器将字符串数组内存不足

时间:2013-02-24 18:32:21

标签: android csv arrays

因为我只读了一个非常简单的csv,其中只有字符串以逗号分隔,并且应该转换为String []。

我认为这很容易,外部罐子会有点太多,我可以轻松处理这个问题。但是会发生的事情是第一项添加,直到内存已满并崩溃!

public List readWinkels(Activity a){         列出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读取该行,然后读取点跳转到下一行(我认为),为什么第一行添加了数万次?

1 个答案:

答案 0 :(得分:2)

这是使用while循环迭代文件行的标准习惯用法,应用于您的代码:

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

您需要在循环的每次迭代中调用readLine()。原始代码只是一个无限循环,因为s只读一次。假设s不是null,则循环条件永远不会为假,因此在使用所有可用内存之前,列表不受限制地增长。