0

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

我认为这很容易,一个外部罐子会有点多,我可以很容易地处理这个。但是会发生什么是第一个项目被添加,直到内存已满并崩溃!

public List readWinkels(Activity 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,则循环条件永远不会为假,因此列表会无限增长,直到使用完所有可用内存。

于 2013-02-24T18:36:26.083 回答