使用Scanner从文件中读取java

时间:2013-04-28 10:21:22

标签: java try-catch readfile

我一直在尝试使用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

2 个答案:

答案 0 :(得分:2)

您在循环中多次调用hasNextLinenextLine,因此如果达到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();
           }
      }