我试图在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();}}}
答案 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数组的长度。然后你就可以了解这个例外。
希望它可能会有所帮助。