Java读取.csv文件并获取java.lang.ArrayIndexOutOfBoundsException:3并且不知道为什么

时间:2013-04-15 20:53:59

标签: java arrays csv indexoutofboundsexception

我正在敲打着我想要完成的程序。我确定答案很简单,但我无法找到解决方案。

当我写入csv文件时,它可以正常工作,但是当从它读取时,如果csv文件中有超过3个对象,我会得到ArrayIndex错误,但是三个或更少,并且它不会抛出任何错误。

以下是我写入文件的代码:

void saveDataToFile(){

    String op = "";

    try {
        FileWriter fw = new FileWriter(filename);
        for (int i =0 ; i< library.length ; i++)
            if(library[i]!=null)
            fw.write(library[i].getDetailsCSV().toString()+"\n");
        fw.write(op.toString());
        fw.close();
    }
    catch(Exception e) {
        System.out.println("ERROR : "+e);
    }
    System.out.println("saveDataToFile()");

}

以下是阅读文件的代码:

void loadDataFromFile(){

    try{
        File fi = new File(filename);
        FileReader fr = new FileReader(fi);
        char[] buffer = new char[(int)fi.length()];
        fr.read(buffer);
        fr.close();

        String all = new String(buffer);
        String[] ip = all.split("\n");

        for (int i=0; i<ip.length; i++){ 
            String[] op = ip[i].split(",");

            String author = op[0];
            String title = op[1];
            int isbn = Integer.parseInt(op[2]);
            String s = op[3];
            boolean h = Boolean.parseBoolean(op[3]);

            for(int j=0; j<op.length; j++){
                if(author.equals("Dickens"))
                    library[i] = new title(author,isbn);
                else if(author.equals("Lumas"))
                    library[i] = new title(author,isbn,s);
                else if(author.equals("Orwell"))
                    library[i] = new title(author,isbn,h);

            }
        }

    }
    catch(Exception e) {
        System.out.println("ERROR : "+e);
    }
            System.out.println("loadDataFromFile()");
    }

library []数组的大小为10.我尝试过System.out.println(op.length);和System.out.println(ip.length);从read方法开始,ip.length为10,op.length为3(无论实际保存到csv文件的对象有多少,即使它已满了。)

如果有人能看到我明显缺少的东西,我真的很感激!

1 个答案:

答案 0 :(得分:1)

我猜这个循环打破了它:

       for(int j=0; j<op.length; j++){
            if(make.equals("Ford"))
                cars[i] = new Ford(model,year);
            else if(make.equals("Mazda"))
                cars[i] = new Mazda(model,year,colour);
            else if(make.equals("Toyota"))
                cars[i] = new Toyota(model,year,h);

        }

如果您有超过3行,则此循环将失败,因为您使用的是i而不是j。不知道这个循环试图做什么,但该部分肯定会失败。

此外,如果op.length为3,则索引3将不存在,因为Java数组从0开始索引而不是1。