java.lang.ArrayIndexOutOfBoundsException:5 WHILE LOOP

时间:2015-02-17 07:15:35

标签: java csv while-loop

我试图在while循环中读取一个大的csv文件。 但是当我运行代码时,我得到java.lang.ArrayIndexOutOfBoundsException: 5 我缺少一步吗?

  String csvFileToRead = "C:/automation/test.csv"; 

  BufferedReader br = null; 

  String line = "";  
  String splitBy = ",";  

  try {  boolean firstLine = true;
      br = new BufferedReader(new FileReader(csvFileToRead));  

      while ((line = br.readLine()) != null ) {       

       if (firstLine) {
           firstLine = false;
                continue;}

       String[] id = line.split(splitBy);
    String replace = id[5].replace("\"", "");



    String cardNo = id[5].replace("\"", "");


    String fname = id[8].replace("\"", "");
    String name = driver.findElement(By.id("bnxczxc")).getAttribute("value");


    if (name.equals(fname)) { 
        //code
    }
    else {
        //code
    }


   }  

  } catch (FileNotFoundException e) {  
   e.printStackTrace();  
  } catch (IOException e) {  
   e.printStackTrace();  
  } finally {  
   if (br != null) {  
    try {  
     br.close();   

    }
    catch (IOException e) {  
     e.printStackTrace();}}}     

3 个答案:

答案 0 :(得分:1)

您最终会在CSV文件中找到一行中至少有6个值的行,因此该行引发了错误:

String replace = id[5].replace("\"", "");

我建议检查如下:

if(id.length > 0)
{
// Do the stuff you're trying to do
}
else
{
// Log or print error
}

如果您进一步排除故障,我希望您能找到的是您的程序正在尝试读取文件的最后一行,该行是空白的。

答案 1 :(得分:0)

如果您的行只有4个属性,则会在id[5]处获得例外。在尝试获取第5个属性之前,请检查id.length。请记住,数组在java中是零的。

答案 2 :(得分:0)

当你像id [5]那样指定数组索引时,有一个例外,因为id数组不包含直到索引5的元素。如果id数组的大小是5,那么你必须访问它的最后一个元素通过使用id [4]作为数组长度从0开始。 PS:第一个System.out.println(id.length)来检查id数组的长度。然后你就可以了解这个例外。

希望它可能会有所帮助。