2014-09-26 2 views
0

У нас есть модуль в нашем приложении, который читает CSV-файл, содержащий около 50000 строк. в настоящее время мы читаем строки с использованием буферизованного считывателя и перебираем его и сохраняем в POJO. Но когда файл читается иногда, он показывает ошибку OutOfMemory. Может ли кто-нибудь предложить решение для этого. Может кто-нибудь наставит меня, чтобы прочитать файл в куски 10000Чтение CSV-файла в кусках 10000 в java

этом пример кода

ArrayList<sampleClass> classList=new ArrayList<sampleClass>(); 
try 
{ 
     br = new BufferedReader(new InputStreamReader(is)); 
     line = br.readLine(); 
     while ((line = br.readLine()) != null) 
     { 
      String[] columnValues = line.split(cvsSplitBy); 
      SampleClass obj=new sampleClass(); 
      if(validation1) 
       obj.setproperty1(columnvalues[0]); 
      if(validation2) 
       obj.setproperty2(columnvalues[1]); 
       ...... 
       ...... 
       ...... 
       if(validationN) 
       obj.setproperty3(columnvalues[n-1]); 
      classList.add(obj); 
     } 
} 
catch() 
{ 
     ... 
} 

return classList; 

ответ

0

TRY Это, надеюсь, это поможет вам.

BufferedReader reader = new BufferedReader(new FileReader(filename)); 
      int checkCount = 0; 
      int chunkTemp = 0; 
      int i = 0; 
      String temp = ""; 
      BufferedWriter writer = null; 
      while ((temp = reader.readLine()) != null) { 
       if (chunkTemp == 0) { 
        writer = new BufferedWriter(new FileWriter(filename + i)); 
       } 

       ++checkCount; 
       ++chunkTemp; 
       writer.write(temp); 
       if(chunkTemp!=10000){ 
        writer.newLine(); 
       } 

       if (chunkTemp == 300) { 
        chunkTemp = 0; 
        ++i; 
        writer.close(); 
       } 
      }