2016-05-18 9 views
0

Ich versuche eine TXT-Datei zu lesen und versuche, sie in einem Array zu speichern. folgende ist das Format der txt-Datei:JAVA- Fehler beim Lesen der Datei 1 (Fehler)

A B 5
A C 2
A D 4
.....

public class search { 
    public static void main(String[] args) throws ParseException { 
     try { 

      Scanner user_input = new Scanner(System.in); // for user input    
      System.out.println("Enter the file name: "); 
      String filename1 = user_input.next(); 

      File file = new File(filename1); 

      search bd = new search(); 
      Node[] nodes; 
      nodes = bd.getNodes(file); 
      bd.printNodes(nodes); 

     } 
     catch(Exception e) { 
      System.out.println("Error reading file " + e.getMessage()); 
     } 
    }  

    public Node[] getNodes(File file) throws IOException { 
     FileReader bd = new FileReader(file); 
     BufferedReader bufferReader = new BufferedReader(bd); 
     String line; 
     ArrayList<Node>list = new ArrayList<Node>(); 
     while ((line = bufferReader.readLine()) != null) { 
      String[] token = line.split(" "); // create string of tokens 
      list.add(new Node(token[0], token[1], Integer.parseInt(token[2]))); 

     } 
     bufferReader.close(); 

     return list.toArray(new Node[list.size()]); // converting list to array 
    } 

    public void printNodes(Node[] nodes) { 
     System.out.println("======================"); 

     for(Node node : nodes) { 
      System.out.println(node); 
     } 
     System.out.println("======================"); 
    } 

Folgende ist meine Klasse Node

class Node { 

    String leftchild; 
    String rightchild; 
    int cost; 

    public Node(){ 

    } 

    public Node(String firstchild, String secondchild, int cost){ 
     this.leftchild = firstchild; 
     this.rightchild = secondchild; 
     this.cost = cost; 
    } 

    public Node(String firstchild, String secondchild) { 
     this.leftchild = firstchild; 
     this.rightchild = secondchild; 
    } 

    public ArrayList<String> getChildren(){ 
     ArrayList<String> childNodes = new ArrayList<String>(); 
     if(this.leftchild != null) 
     { 
      childNodes.add(leftchild); 
     } 
     if(this.rightchild != null) { 
      childNodes.add(rightchild); 
     } 
     return childNodes; 
    } 

    public boolean removeChild(Node n){ 
     return false; 
    } 

    @Override 
    public String toString() { 
     return leftchild +" "+ rightchild; 
    } 

} 

ich keine Compilierung Probleme haben, aber wenn ich meinen Code ausführe gibt mir Fehler als

Fehler beim Lesen der Datei 1

nicht sicher, warum. Ich habe versucht, meinen Code auf viele Arten zu ändern, aber keiner von ihnen hat funktioniert. Könnte jemand bitte das für mich herausfinden? Dank

+1

Verwenden 'e.printStackTrace();' in den catch-Blöcke die vollständige Fehlermeldung angezeigt . – Kayaman

+0

Ja, ich habe es jetzt benutzt und festgestellt, dass der Fehler "Ausnahme im Thread" ist main "java.lang.ArrayIndexOutOfBoundsException: 1' Also ich vermute, dass es ein Problem mit meiner' printNodes' Methode gibt? – rose

+0

Sie müssen nicht raten, wann Sie Google verwenden können. – Kayaman

Antwort

1

Wenn Sie eine ArrayIndexOutOfBoundsException: 1 erhalten, bedeutet dies, dass Sie mindestens eine Zeile in Ihrer Test-Eingabedatei haben, die keine Leerzeichen enthält.

Tat in Ihrem Code Sie String[] token = line.split(" ") tun, die von einem Raum alle getrennt Token extrahieren und sie in eine Reihe von String setzen, so dass, wenn Sie diesen Fehler erhalten, bedeutet dies, dass die length des Arrays ist 1 so, dass man nicht Zugriff auf token[1], da es sich auf das zweite Element Ihres array bezieht, das nur ein Element enthält.

Also in Ihrem Fall sollten Sie zunächst prüfen, ob die length des Arrays hat das Recht length als nächste:

String[] token = line.split(" "); // create string of tokens 
if (token.length >= 3) { 
    list.add(new Node(token[0], token[1], Integer.parseInt(token[2]))); 
} 
+0

Könnten Sie bitte ein bisschen spezifisch sein? – rose

+0

Antwort verbessert, um es klarer zu machen –

+0

Oh okay sorry lass mich überprüfen – rose