2013-04-28 80 views
2

我一直在尝试使用扫描仪读取我的文件。从文件中读取,使用扫描仪的java

我得到的错误是NoSuchElementException: No line found 所有的数组都是字符串数组来存储来自文件的信息。 正在使用的分隔符是“;”。

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

你能显示info.txt的内容吗? – 2013-04-28 10:32:53

+0

我自己解决了。所以感谢您的帮助! – John 2013-04-29 05:29:34

回答

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++;    
} 
+0

Yeap。它是带分隔符的单行。使用此代码时发生错误。线程“main”java.util.NoSuchElementException中的异常。该错误是在cardType [我]。我认为这个错误发生时,它不能从中得到任何东西? – John 2013-04-28 13:47:55

+0

是因为在最后一行没有“;”?因此,它会占用第一张卡号和下一个真实姓名,并将它们放在变量中? – John 2013-04-28 14:02:35

+0

我把它们打印出来并进行了测试。无论如何,如果没有别的东西要阅读,那么要求迭代器停止?我认为它得到错误 – John 2013-04-28 14:06:35

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(); 
      } 
     } 
+0

它与分隔符的单行。所以我不知道这是否会有所帮助.. – John 2013-04-28 14:01:50