2014-02-03 3 views
0

Я пытаюсь импортировать большой файл данных и вставлять информацию в 2D-массив. Файл имеет около 19 000 строк и состоит из 5 столбцов. Мой код абсолютно правильный, ошибок выполнения и исключений нет. Хотя проблема заключается в том, что когда я пытаюсь распечатать данные [15000] [0], он говорит null. но моя строка имеет 15 000 строк и должна распечатывать элемент внутри массива. Но когда я распечатываю данные [5000] [0], он работает. Что может быть неправильным? У меня 19 000 городов в 19000 разных строк, но похоже, что, когда он насчитывает около 10 000+, ничего не сохраняется в массиве 2d. Помогите пожалуйстаИмпорт данных из большого файла в массив 2d

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.FileNotFoundException; 
import java.io.IOException; 



public class Data1 
{ 
    public static void main(String[] args) 
{ 
    try{ 
     FileReader file = new FileReader("/Users/admin/Desktop/population.csv"); 
     BufferedReader in = new BufferedReader(file); 

     String title = in.readLine(); 
     String[][] data = new String[20000][5]; 
     int currentRow = 0; 
     String current; 


     int i = 0; 
     String temp; 
     while ((temp = in.readLine()) !=null) 
     { 
      String[] c = new String[5]; 
      String line = in.readLine().replaceAll("\"", ""); //changing the format of the data input 
      c = line.split(","); 
      c[1] = c[1].replace(" ", ""); 


      for (int j = 0; j <data[0].length; j++) 
      { 
       current = c[j]; 
       data[i][j] = c[j]; 

      } 

      i++; 
     } 

     System.out.println(data[15000][0]); 

    } 
     catch (FileNotFoundException ex) 
     { 
      ex.printStackTrace(); 
     } 
     catch (IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

plz проверить размер массива. – Kick

ответ

3

Вы выбрасываете линию на каждый цикл.

while (in.readLine() != null) 

должен быть

String temp; 
while ((temp = in.readLine()) != null) 

И тогда нет звонков в .readline() внутри цикла, но относятся к "Темп".

+0

Он по-прежнему дает мне null, Ваше предложение, похоже, не работает –

+1

Вам нужно будет увидеть обновленный код. – Xabster

+0

* Строка line = temp.replaceAll ("\" "," "); * - Вы использовали temp, как это? – gowtham

0

чтения линии только один раз ...

String line=null; 
     while ((line=in.readLine()) !=null) // reading line once here 
     { 
      String[] c = new String[5]; 
      line = line.replaceAll("\"", ""); // 
      c = line.split(","); 
      c[1] = c[1].replace(" ", ""); 
0

Одна из ваших ошибок являются петли

while (in.readLine() !=null) 
     { 
      String[] c = new String[5]; 
      String line = in.readLine().replaceAll("\"", ""); //changing the format of the data input 
      c = line.split(","); 
      c[1] = c[1].replace(" ", ""); 

Каждый раз, когда вы вызываете in.readLine() считывает строку, так что вы пропускаете по одной строке каждый раз, так как вы дважды вызываете readline (таким образом, читаете две строки), но сохраняете только вторую строку.

Вы должны заменить его. Строка line = in.readLine();

while (line !=null) 
     { 
      String[] c = new String[5]; 
      line.replaceAll("\"", ""); //changing the format of the data input 
      c = line.split(","); 
      c[1] = c[1].replace(" ", ""); 
//whatever code you have 
//last line of the loop 
line=in.readLine(); 

Можете ли вы предоставить нам пару строк вашего файла? И вы уверены, что все файлы отформатированы правильно?

Смежные вопросы