2017-02-16 2 views
0

Ich habe die folgende Methode, die eine Datei liest, wo es eine ID (int) hat und Inhalt (String) durch einen Tabulator getrennt. Meine Methode liest die Datei Zeile für Zeile, und mit der Tab-Trennzeichen, ich analysieren die ID und die Zeichenfolge in einer doppelt verknüpften Liste wie folgt:ArrayIndexOutOfBoundsException wenn sie aus einer Datei zu lesen

void readAndAssemble(String fileName) 
    { 
     Scanner sc; 
     try 
    { 
     sc = new Scanner(new File(fileName)); 
     while (sc.hasNextLine()) 
     { 
      String line = sc.nextLine(); 
      String lines[] = line.split("\t"); 
      int packetID = Integer.parseInt(lines[0]); 
      // ----------------------------------------- 
      String packetContent = lines[1]; // gives error in terminal 
      // ----------------------------------------- 
      DLLNode curr = header.getNext(); 
      DLLNode prev = header; 
      while (packetID > curr.getPacketID()) 
      { 
       prev = curr; 
       curr = curr.getNext(); 
      } 
      DLLNode newNode = new DLLNode(packetID, packetContent, prev, curr); 
      prev.setNext(newNode); 
      curr.setPrev(newNode); 

     } 
     sc.close(); 
    } catch (FileNotFoundException e) 
    { 
     System.out.println("File does not exist"); 
    } 

} 

Diese Methode funktioniert perfekt in Eclipse- wenn ich laufe , aber gibt mir diese Fehlermeldung, wenn ich javac verwenden und führen sie es in Terminal:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
at DLL.readAndAssemble(DLL.java:40) 
at MessageAssembler.main(MessageAssembler.java:11) 

Wo ist mein MessageAssembler Klasse sieht wie folgt aus:

public class MessageAssembler 
{ 
    public static void main(String[] args) 
    { 
     DLL myDLL = new DLL(); 
     myDLL.readAndAssemble("Mystery3.txt"); 
     myDLL.printContent(); 
    } 
} 

Was könnte das verursachen?

+0

Entweder der folgenden Zeilen können Sie Probleme haben int packetID = Integer .parseInt (Zeilen [0]); // ----------------------------------------- String packetContent = Zeilen [] 1]; // gibt Fehler im Terminal. Überprüfen Sie die Zeilennummer 11 im Code. – GrabNewTech

+0

Könnten Sie einen Teil der Datei veröffentlichen? – BrunoDM

+0

Sie können es unter http://www.eecs.yorku.ca/course_archive/2016-17/W/2011/Mystery.txt –

Antwort

1

Es sieht so aus, als hätten Sie Zeilen in Ihrer Datei, die nicht Ihrem Verständnis entsprechen.

versuchen zu tun

String lines[] = line.split("\t"); 
if (lines.length < 2) { 
    System.err.println ("error with line " + line); 
    continue; 
} 

Es gibt ein Problem zu sein scheint Scanner auf einer unix Datei mit der Verwendung von

versuchen

FileInputStream fstream = new FileInputStream("c:/temp/a.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 

    String line; 

    //Read File Line By Line 
    while ((line = br.readLine()) != null) { 
     // Print the content on the console 
     System.out.println (line); 
     String [] lines = line.split ("\t"); 
     if (lines.length < 2) { 
      System.err.println ("error with line " + line); 
      continue; 
     }   

    } 

    //Close the input stream 
    br.close(); 
+0

Found ein Duplikat bei http://Stackoverflow.com/a/8331416/2310289 mit @HovercraftFullOfEels beantwortet –

Verwandte Themen