因为我只读了一个非常简单的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读取该行,然后读取点跳转到下一行(我认为),为什么第一行添加了数万次?
答案 0 :(得分:2)
这是使用while
循环迭代文件行的标准习惯用法,应用于您的代码:
String s;
while ((s = br.readLine()) != null){
winkelList.add(s);
System.out.println(s.toString());
}
您需要在循环的每次迭代中调用readLine()
。原始代码只是一个无限循环,因为s
只读一次。假设s
不是null
,则循环条件永远不会为假,因此在使用所有可用内存之前,列表不受限制地增长。