2017-02-16 9 views
0

У меня есть следующий метод, который читает файл, в котором он имеет ID (INT) и Content (String), разделенные табуляцией. Мой метод читает файл строка за строкой, и с помощью вкладки разделители, я разобрать ID и строку в дважды связанный список как так:ArrayIndexOutOfBoundsException при чтении из файла

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"); 
    } 

} 

Этот метод отлично работает в Eclipse, когда я бегу это, но дает мне эту ошибку, когда я использую JAVAC и запустить его в терминале:

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

Где мой класс MessageAssembler выглядит следующим образом:

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

Что может быть причиной этого?

+0

Любой из приведенных ниже строк вы можете иметь проблемы ИНТ packetID = Integer .parseInt (строки [0]); // ----------------------------------------- String packetContent = lines [ 1]; // дает ошибку в терминале. Проверьте номер строки 11 в коде. – GrabNewTech

+0

Не могли бы вы опубликовать часть файла? – BrunoDM

+0

Вы можете найти его на http://www.eecs.yorku.ca/course_archive/2016-17/W/2011/Mystery.txt –

ответ

1

Похоже, что в вашем файле есть строки, которые не соответствуют вашему пониманию.

попробовать сделать

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

Там, кажется, проблема с помощью сканера на unix файл

попробовать

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

Найден дубликат на http://stackoverflow.com/a/8331416/2310289, на который ответил @HovercraftFullOfEels –