55 votes

java.util.NoSuchElementException : aucune ligne trouvée

J'ai eu une exception d'exécution dans mon programme pendant que je lis un fichier via un scanner.

 java.util.NoSuchElementException: No line found     
   at java.util.Scanner.nextLine(Unknown Source)    
   at Day1.ReadFile.read(ReadFile.java:49)  
   at Day1.ParseTree.main(ParseTree.java:17) 

Mon code est :

 while((str=sc.nextLine())!=null){
    i=0;
    if(str.equals("Locations"))
    {
        size=4;
        t=3;
        str=sc.nextLine();
        str=sc.nextLine();
    }
    if(str.equals("Professions"))
    {
        size=3;
        t=2;
        str=sc.nextLine();
        str=sc.nextLine();
    }
    if(str.equals("Individuals"))
    {
        size=4;
        t=4;
        str=sc.nextLine();
        str=sc.nextLine();
    }

int j=0;
String loc[]=new String[size];
while(j<size){
    beg=0;
    end=str.indexOf(',');
    if(end!=-1){
        tmp=str.substring(beg, end);
        beg=end+2;
    }
    if(end==-1)
    {
        tmp=str.substring(beg);
    }
    if(beg<str.length())
        str=str.substring(beg);
    loc[i]=tmp;
    i++;

    if(i==size ){
        if(t==3)
        {
            location.add(loc);
        }
        if(t==2)
        {
            profession.add(loc);
        }
        if(t==4)
        {
            individual.add(loc);
        }
        i=0;
    }
    j++;
    System.out.print("\n");
}

52voto

ratchet freak Points 22412

avec Scanner vous devez vérifier s'il y a une ligne suivante avec hasNextLine()

donc la boucle devient

 while(sc.hasNextLine()){
    str=sc.nextLine();
    //...
}

ce sont les lecteurs qui renvoient null sur EOF

bien sûr dans ce morceau de code, cela dépend si l'entrée est correctement formatée

20voto

agr Points 101

Je rencontre aussi ce problème. Dans mon cas, le problème était que j'ai fermé le scanner à l'intérieur de l'une des fonctions.

 public class Main 
{
	public static void main(String[] args) 
	{
		Scanner menu = new Scanner(System.in);
        boolean exit = new Boolean(false);
    while(!exit){
		String choose = menu.nextLine();
        Part1 t=new Part1()
        t.start();
	    System.out.println("Noooooo Come back!!!"+choose);
		}
	menu.close();
	}
}

public class Part1 extends Thread 
{
public void run()
  { 
     Scanner s = new Scanner(System.in);
     String st = s.nextLine();
     System.out.print("bllaaaaaaa\n"+st);
     s.close();
	}
}

		 

Le code ci-dessus faisait la même exaptation, la solution était de fermer le scanner une seule fois à la main.

18voto

Brian Roach Points 43787

Vous appelez nextLine() et cela lève une exception lorsqu'il n'y a pas de ligne, exactement comme le décrit la javadoc. Il ne retournera jamais null

http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html

7voto

Luís de Sousa Points 235

Pour une raison quelconque, la classe Scanner émet également cette même exception si elle rencontre des caractères spéciaux qu'elle ne peut pas lire. Au-delà de l'utilisation de la méthode hasNextLine() avant chaque appel à nextLine() , assurez-vous que le bon encodage est passé au constructeur Scanner , par exemple :

Scanner scanner = new Scanner(new FileInputStream(filePath), "UTF-8");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X