无法将.CSV文件加载到2d数组中

时间:2017-03-26 23:15:46

标签: java arrays csv indexoutofboundsexception

我正在尝试将CS​​V文件加载到2d数组中,但是当我在main中调用它时,我收到错误

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0

在我的代码中,当文件有下一行时,它会拆分该行,将其存储在一个字符串数组中,然后将其移动到2D数组中。我不明白怎么会有错误。有人愿意解释,还是我只是非常密集?

public int rows = 0;
public int cols = 0;
public String[][] filetable = new String[rows][cols];

 public void set_Array(File example)
{        
    try 
    {
         FileReader file = new FileReader(example);
         Scanner sc = new Scanner(file);  

         if(sc.hasNextLine())
         { 
             String[] tokens = sc.nextLine().split(",");
             cols = tokens.length;
             rows++;
         }

         while(sc.hasNextLine())
         {
             rows++;
             sc.nextLine();                 
         }
    } 
    catch (FileNotFoundException e) 
    {
        System.out.println(e);
    }

}
 public void to_Array(File example)
    {
         try 
        {
             FileReader file = new FileReader(example);
             Scanner sc = new Scanner(file);

             int r = 0;
             while(sc.hasNextLine())
             {
                 String[] tokens = sc.nextLine().split(",");
                 for(int c = 0; c < cols; c++)
                   {filetable[r][c] = tokens[c];}

                 r++;
             }

        }

                catch (FileNotFoundException e) 
        {
            System.out.println(e);
        }
    }

1 个答案:

答案 0 :(得分:1)

我不知道您调用to_Arraypublic String[][] filetable = new String[rows][cols];方法的顺序。但我猜,问题在于,当rows=0cols=0调用set_Array时,您实际上创建的是0行和0大小的2D数组。要解决问题,请调用rows方法为colsto_Array分配正确的值,然后在public void to_Array(File example) {// Now rows and cols will have proper values assigned String[][] filetable = new String[rows][cols]; try { FileReader file = new FileReader(example); Scanner sc = new Scanner(file); int r = 0; while(sc.hasNextLine()) { String[] tokens = sc.nextLine().split(","); for(int c = 0; c < cols; c++) {filetable[r][c] = tokens[c];} r++; } } catch (FileNotFoundException e) { System.out.println(e); } } 方法中实例化您的2D数组。

League\OAuth2\Server\Grant\PasswordGrant