我一直在尝试使用Scanner阅读我的文件。
我得到的错误是NoSuchElementException: No line found
所有数组都是String数组,用于存储文件中的信息。
使用的分隔符是“;”。
private void choice() {
File file = new File("info.txt");
try {
Scanner read = new Scanner(file);
read.useDelimiter(";");
while (read.hasNextLine()){
if (read.hasNext()){
realName[i] = read.next();
} else {
break;
}
if (read.hasNext()){
userName[i] = read.next();
} else {
break;
}
if (read.hasNext()){
password[i] = read.next();
} else {
break;
}
if (read.hasNext()){
address[i] = read.next();
} else {
break;
}
if (read.hasNext()){
contact[i] = read.next();
} else {
break;
}
if (read.hasNext()){
cardType[i] = read.next();
} else {
break;
}
if (read.hasNext()){
cardNo[i] = read.next();
} else {
break;
}
i++;
}
}
catch ......
}
如果我使用上面的代码,我将始终获得NoSuchElementException: No line found
。
现在我使用下面的代码..所有内容都会很好地打印出来,没有任何错误。
private void choice() {
File file = new File("info.txt");
try {
Scanner read = new Scanner(file);
read.useDelimiter(";");
while (read.hasNextLine()){
realName = read.nextLine();
System.out.println(realName);
}
}
catch ......
}
一切都将逐行打印出来。没有任何问题,但这不是我想要的。我想将它们存储在数组中。
编码的第一部分是否有任何错误?
我还使用read.hasNext()
而不是read.hasNextLine()
。
但也有错误。
任何善良的灵魂都可以提供帮助吗?
==编辑 抱歉。我没有在info.txt中显示数据,就像这样。
Mr Dash;dash;dash123;Dash Lane 1;414924934;VISA;1219240241029021092
Mr Long;long;long123;Long Lane 1;3924929;MASTERCARD;123902039109329
答案 0 :(得分:2)
您在循环中多次调用hasNextLine
和nextLine
,因此如果达到EOF
,您可能会收到错误消息。
由于您使用的是分隔符,我认为您试图在单次迭代中从单行读取每个单词。试试这个:
int i=0;
while (read.hasNextLine()){
realName[i] = read.next();
userName[i] = read.next();
password[i] = read.next();
address[i] = read.next();
contact[i] = read.next();
cardType[i] = read.next();
cardNo[i] = read.next();
i++;
}
答案 1 :(得分:1)
在每个read.nextLine()
之前,您必须检查read.hasNextLine()
,否则您可能会遇到异常!
可能在while
循环中的某个位置,您正在read.nextLine()
并且没有下一行(已达到EOF)
while (read.hasNextLine()){
for(int i=0; i<=10; i++){
realName[i] = read.nextLine();
userName[i] = read.nextLine(); // check for read.hasNextLine();
password[i] = read.nextLine(); // check for read.hasNextLine();
address[i] = read.nextLine(); // check for read.hasNextLine();
contact[i] = read.nextLine(); // check for read.hasNextLine();
cardType[i] = read.nextLine(); // check for read.hasNextLine();
cardNo[i] = read.nextLine(); // check for read.hasNextLine();
}
}