数组列表和从文件中读取

时间:2016-02-26 21:19:51

标签: java multidimensional-array

所以我制作了一个多维数组列表,其中应存储姓氏,名字,电子邮件等,并从.txt文件中读取此信息。似乎有一个索引超出界限错误弹出,我不知道是为了什么。

public static void readFilesIntoArrayLists(String filename) throws IOException
{
Scanner in;
int i = 0;
in = new Scanner(filename);
String [] fileElements;

mainList = new ArrayList<ArrayList<String>>();
mainList.add(new ArrayList<String>());
mainList.add(new ArrayList<String>());
mainList.add(new ArrayList<String>());
mainList.add(new ArrayList<String>());
mainList.add(new ArrayList<String>());

while(in.hasNext())
{
  fileElements = (in.nextLine().split(","));
  mainList.get(0).add(fileElements[0]);
  mainList.get(1).add(fileElements[1]);
  mainList.get(2).add(fileElements[2]);
  mainList.get(3).add(fileElements[3]);
  mainList.get(4).add(fileElements[4]);
}
in.close();
System.out.println("Files have been read..");
}

4 个答案:

答案 0 :(得分:3)

你没有检查文件中是否有错过某些参数(或空行或其他)的行。

你的while循环应该类似于:

while(in.hasNext())
{
  fileElements = (in.nextLine().split(","));
  if (fileElements.length == 5) {
    mainList.get(0).add(fileElements[0]);
    mainList.get(1).add(fileElements[1]);
    mainList.get(2).add(fileElements[2]);
    mainList.get(3).add(fileElements[3]);
    mainList.get(4).add(fileElements[4]);
  } else {
    // do something with error lines - log it, print to screen, or just skip them
  }
}

答案 1 :(得分:1)

您没有创建读取文件内容的Scanner。您的Scanner会从参数filename中读取字符串。

要解决此问题,请替换当前的初始化

in = new Scanner(filename);

由此:

in = new Scanner(new FileInputStream(filename), "UTF-8");

确保检查您的文件是否实际上是UTF-8编码。

您获得ArrayIndexOutOfBoundsException,因为filename与您想要的行格式不符。

还有两个评论:

  • 您应该在while条件中使用hasNextLine方法,而不是hasNext
  • 正如其他答案中已经指出的那样,您应该处理与预期格式不符的行。

答案 2 :(得分:1)

始终确保您尝试在ArrayList中访问的索引实际上已被占用。

常见的情况是

while(in.hasNext())
    {
        fileElements = (in.nextLine().split(","));
        int idx = 0;
        for (; idx < fileElement.size() && idx < 5; idx++ ) {
            mainList.get(idx).add(fileElements[idx]);
        }   

        //And if you need to fill all your five arrays with data, then
        while (idx < 5) {
            mainList.get(idx).add([""]);
        }
    }

答案 3 :(得分:0)

代码似乎正确。你必须确保你有5个元素。

修改后的代码:

    String [] fileElements;
    mainList = new ArrayList<ArrayList<String>>();
    mainList.add(new ArrayList<String>());
    mainList.add(new ArrayList<String>());
    mainList.add(new ArrayList<String>());
    mainList.add(new ArrayList<String>());
    mainList.add(new ArrayList<String>());

int length = fileElements.getLength();
    while(in.hasNext())
    {
      fileElements = (in.nextLine().split(","));
for(int index = 0; index < length; index++)
{
      mainList.get(index).add(fileElements[index]);
}
    }