将大数据导入二维数组

时间:2014-02-03 06:11:15

标签: java multidimensional-array

当我运行这个程序时,我得到一个异常,它的大文件充满了数据,我试图从该文件导入数据并将信息插入到2d数组中,但是,该文件包含大约19,000行。 虽然,我的程序停止运行并告诉我在此过程中没有行。我的例外是java.util.NoSuchElementException:找不到行                                   at java.util.Scanner.nextLine(Scanner.java:1585)                                在Data.main(Data.java:30)

请帮忙,有什么不对?

import java.util.Scanner;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;



public class Data
{
    public static void main(String[] args)
    {
      try{
      java.io.File file = new java.io.File("/Users/admin/Desktop/data.csv");

        Scanner in = new Scanner(file);



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


        int i = 0;

       while (in.hasNextLine())
        {
            String[]  c = new String[5];
            String line = in.nextLine().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++;
         }



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

    }

2 个答案:

答案 0 :(得分:2)

请参阅NoSuchElementException

  

由Enumeration的nextElement方法抛出以指示   枚举中没有其他元素

表示您正在尝试读取非现有数据。发生这种情况是因为while循环中的条件始终满足,导致nextLine尝试读取不存在的行。您应该将while循环更改为:

while(in.hasNextLine())

如果有要阅读的行,这样可以确保nextLine仅适用于 我制作了一个虚拟的csv文件,它确实阅读了所有的行。

使用调试器会对你有所帮助,我强烈建议你使用它。

答案 1 :(得分:1)

您的文件和代码中没有19518行,您要求它读取很多行。 (标题+ 19517 = 19518)。

永远不要硬编码文件中期望的行数。如果您对某个数字进行硬编码,请对您需要的最小数字进行硬编码,以使代码正常工作。