2016-07-11 5 views
0

Ich versuche, Wort für Wort von Dateien zu erhalten und jeden ersten in ein Wörterbuch aufnehmen und alle dann als Liste zu dokumentieren, aber ich begannDatei Lesefehler in Java

diesen Fehler zu haben
File files[] = directory.listFiles(); 
ArrayList<String> tockenList = new ArrayList<String>(); 
for (File f : files) { 

    Scanner s = null; 

    int DocID = Integer.parseInt(f.getName().replaceAll("\\D+", "")); 
    try { 
     s = new Scanner(f).useDelimiter("[ ,!?. ]+"); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Doc doc = new Doc(); 
    while (s.hasNext()) { 
     tockenList.add(s.next()); 
     String str = s.next(); // this line is 34 
     Dictionary.getInstance().addElementToListOfTerms(str, DocID); 
    } 
    doc.addListOfTokens(DocID, tockenList); 
    s.close(); 

alles funktionieren gut beim Debuggen und kein Fehler wird angezeigt, aber beim Ausführen gibt es Folgendes:

Exception in thread "main" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at TeamLab.Main.main(Main.java:34) 

Vielen Dank Jungs, ich habe schon. es sollte

while (s.hasNext()) { 
      String str = s.next(); 
      tockenList.add(str);   
      Dictionary.getInstance().addElementToListOfTerms(str, DocID); 
     } 
+1

Don lesen Schreib keinen Code wie diesen. Code, der vom Erfolg eines vorherigen try-Blocks abhängt, sollte sich innerhalb dieses try-Blocks befinden. Momentan geht es nach einer 'FileNotFoundException' so weiter, als ob es nicht passiert wäre. – EJP

Antwort

0

wie diese, warum Sie diese Zeilen nicht tauschen

tockenList.add(s.next()); 
    String str = s.next(); // this line is 34 

String str = s.next(); 
    tockenList.add(str); 

sein, wie Sie für hasNext testen, aber dann zweimal

+0

keine Änderung gibt es denselben Fehler. – Bebo

+0

Eigentlich ist die erste Datei leer, also while-Schleife nicht zum ersten Mal eingegeben. Aber es hat vorher gut funktioniert. – Bebo

+0

Vielleicht reinigen Sie Ihre Projekte und neu kompilieren, da Ihre Antwort keinen Sinn ergibt. Wenn die while-Schleife nicht eingegeben wird, wie kann dann die Zeile 34 den Fehler verursachen? Aktualisieren Sie Ihre Frage mit dem Code, den Sie verwenden –