ArrayIndexOutOfBounds循环遍历文本文件

时间:2015-04-30 08:26:40

标签: java

我之前已经多次从文本文件加载而没有这个问题,我已阅读并重新阅读我的代码而我(个人)无法理解为什么我会遇到这个问题,我完全迷失了。

static public ArrayList<Media> importMedia(String fileName) throws IOException
    {
        try {
            ArrayList<Media> mList = new ArrayList<>();
            BufferedReader reader = new BufferedReader(new FileReader(fileName));
            String line = reader.readLine();
            int numberOfItems = Integer.valueOf(line);
            while((line = reader.readLine()) != null)
            {
                String[] split = line.split(",");
                if(split[0].contains("mp3"))
                {
                    Mp3 mp3 = new Mp3(split[1]/*title*/,split[0]/*filename*/,Integer.parseInt(split[4])/*releaseyear*/,split[2]/*artist*/,split[3]/*album*/,split[5]/*label*/,Double.parseDouble(split[6])/*runtime*/);
                    mList.add(mp3);
                }else if (split[0].contains("gif"))
                {
                    Gif gif = new Gif(split[1]/*title*/,split[0]/*filename*/,Integer.parseInt(split[6])/*releaseyear*/,Double.parseDouble(split[2])/*width*/,Double.parseDouble(split[3])/*height*/,split[4]/*equipName*/,split[5]/*equipModel*/);
                    mList.add(gif);
                }else if(split[0].contains("avi"))
                {
                    String castNames = "";
                    boolean first = true;
                    for(int i = 7; i < 15; i++)
                    {
                        if(!(split[i].isEmpty()))
                        {
                            if(first)
                            {
                                castNames += split[i];
                                first = false;
                            }else{
                                castNames += "," + split[i];
                            }
                        }
                    }
                    Avi avi = new Avi(split[1]/*title*/,split[0]/*filename*/,Integer.parseInt(split[3])/*releaseyear*/,split[2]/*studio*/,split[5]/*director*/,castNames/*castnames*/,Double.parseDouble(split[4])/*runtime*/,Integer.parseInt(split[6])/*cast*/);
                    mList.add(avi);
                }else{
                }
            }
            return mList;
        } catch (Exception ex) { System.out.println(ex.toString()); }
        return null;
    }

现在它只会获得前3个文件(控制台如图所示) enter image description here

我只是试图循环而且我不确定为什么它会超出范围,我看不出循环有什么问题,或者为什么它给了我一些但不是全部。

1 个答案:

答案 0 :(得分:0)

在此代码中,您使用从索引0到索引14的字符串数组split

通过检查String Array的长度来做一些防御性编程会很好。

请先检查数组的长度,然后再继续在程序中使用它。

喜欢split.length >14

通过使用这种习惯,您可以随时逃离“ArrayIndexOutOfBoundsException