将数据从大文件导入二维数组

时间:2014-02-03 08:24:40

标签: java multidimensional-array

我正在尝试导入大型数据文件并将信息插入到2D数组中。该文件大约有19,000行,由5列组成。我的代码绝对正确,没有运行时错误也没有异常。但问题是,当我尝试打印出数据[15000] [0]时,它表示为null。但我的行确实有15,000行,它应该打印出数组中的元素。但是当我打印出数据[5000] [0]时,它可以工作。什么可能是错的?我在19,000个不同的行中有19,000个城市,但似乎当它大约10,000+时,没有任何东西被存储在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();
        }
    }
}

3 个答案:

答案 0 :(得分:3)

你在每个循环上丢掉一条线。

while (in.readLine() != null)

应该是

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

然后在循环中没有调用.readLine(),而是引用“temp”。

答案 1 :(得分: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(" ", "");

答案 2 :(得分: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两次(因此读取两行),但只存储第二行。

你应该用它替换它。 String 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();

您能为我们提供几行文件吗?你确定所有文件的格式都正确吗?