2013-02-24 34 views
0

因爲我只讀了一個非常簡單的csv,其中只有逗號分隔的字符串應該轉換爲String []。自己的CSV閱讀器字符串數組內存不足

我認爲這很容易,外部的jar會有點多,我可以處理這很容易。但是會發生什麼呢,第一個項目被添加,直到內存已滿並崩潰!

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讀取行,然後讀取點跳轉到下一行(我認爲),爲什麼第一行增加了數十億次?

回答

2

下面是使用while循環遍歷文件的行標準的成語,應用到你的代碼:

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

您需要在通過循環來調用readLine()。原始代碼不過是無限循環,因爲s只能讀取一次。假設s不是null,循環條件永遠不會是錯誤的,所以列表會一直增長,直到使用所有可用內存爲止。