所以我制作了一个多维数组列表,其中应存储姓氏,名字,电子邮件等,并从.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..");
}
答案 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
与您想要的行格式不符。
还有两个评论:
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]);
}
}