2016-02-19 3 views
-1

// Вот мой код. Что он должен делать: читайте в .txt-файле, строко за строкой. Возьмите каждую строку (которая имеет свою информацию, разделенную запятыми), разделите ее, возьмите каждую информацию и создайте экземпляр объекта ObjectName2. Используйте метод addData для добавления ObjectName2 в ObjectName1. Проблема: читает первую строчку, добавляет ее в ObjectName1. Считывает ту же строку, встречает дублируемую строку, исключает исключение. Продолжает чтение первой строки. Он никогда не войдет во вторую строчку. Из того, что я вижу с моим кодом, он должен работать нормально. Любая помощь будет принята с благодарностью. Этот код находится в другом классе, например ObjectName3.Java: Почему мой BufferedReader не читает следующую строку моего кода?

РЕДАКТИРОВАТЬ: что происходит, он выводит на консоль, что он нашел дублируемую строку, например, имя строки. Затем он снова выводится на консоль: Дублирует найденную строку, имя_линии. И снова, и снова, и снова. Это продолжается вечно. Это бесконечно. Он никогда не проходит мимо первой линии. Просто продолжайте говорить «Дублировать строку: имя_линии».

public ObjectName1 load() { 

    ObjectName1 list = new ObjectName1(); 
    BufferedReader fileIn; 
    String inputLine; 
    try { 
     fileIn = new BufferedReader(new FileReader(inputFileName)); 
     inputLine = fileIn.readLine(); // read in first line 
     while (inputLine != null) { 
      String[] listOfData = inputLine.split(","); 
      String data1= listOfData[0]; 
      String data2= listOfData[1]; 
      String data3= listOfData[2]; 
      int data4= Integer.parseInt(listOfData[3]); 
      int data5= Integer.parseInt(listOfData[4]); 
      ObjectName2 data= new ObjectName2(data1, data2, data3, data4, data5); 
      list.addData(data); // throws exception if duplicate data encountered 
      inputLine = fileIn.readLine(); // read in next line? 
     } 
    } 
    catch (Exception e) { // happens if we try to add duplicate data 
     System.out.println(e.getMessage()); 
    } 
    finally { 
     boolean lineAfterException = true;; 
     while (inputLine != null) { 
      if (lineAfterException) { 
       inputLine = fileIn.readLine(); 
       lineAfterException = false; 
      } 
      String[] listOfData = inputLine.split(","); 
      String data1 = listOfData [0]; 
      String data2 = listOfData [1]; 
      String data3 = listOfData [2]; 
      int data4 = Integer.parseInt(listOfData [3]); 
      int data5 = Integer.parseInt(listOfData [4]); 
      ObjectName2 data= new ObjectName2 (data1, data2, data3, data4, data5); 
      list.addData(data) 
      inputLine = fileIn.readLine(); 
     } 
    } 
    fileIn.close(); 
    return list; 
} 
+0

добавить свой метод addData из класса ObjecName1. – Jimmy

+0

Нет. Итак, что происходит, он выводит на консоль, что нашел дубликат строки, например: lineName. Затем он снова выводится на консоль: Дублирует найденную строку, имя_линии. И снова, и снова, и снова. Это продолжается вечно. Это бесконечно. Он никогда не проходит мимо первой линии. – Wings

ответ

0

Я думаю, что это действительно читая его.

вы можете проверить это, добавив следующую строку:

System.out.println (inputLine);

после того, как этот:

inputLine = fileIn.readLine();


inputLine = fileIn.readLine();

System.out.println (inputLine);

Я думаю, ваша проблема в том, что вы сравниваете строки, я имею в виду эту строку: list.addData (data); // бросает исключение, если дублированные данные столкнулись

Я думаю, что было бы полезно, если вы разместите, как вы сравниваете строки, я имею в виду, если вы правильно сравнивали содержимое строк вместо указателя на объект в память