2013-08-19 3 views
0

Я пытаюсь создать систему бронирования в Java, однако каждый раз, когда я запускаю программу петли, пока (как показано ниже) скачет прямо до конца, как если бы линия чтения было нулеваяJava файл Readline возвращает нуль

//hardcoded file path - needs to be changed when program moved 
      String fileName = "C:\\Users\\BOO\\Desktop\\SystemsSoftwareBookingsystem\\FilmData.txt"; 
      String line = null; 
      int readInt = 0; 
      float readFloat = 0; 
      int item_counter = 0; 

    try 
      { 

      BufferedReader bufferedReaderF = new BufferedReader(new FileReader(new File(fileName))); 

while ((line = bufferedReaderF.readLine()) != null) 
      { 
       Film tmpFilm = new Film(); 

       switch (item_counter) 
       { 
        case 0: 
       { 
        line = bufferedReaderF.readLine(); 
        tmpFilm.name = line; 
        item_counter++; 
        break; 
       } 
       case 1: 
       { 
        readInt = bufferedReaderF.read(); 
        tmpFilm.seatsTotal = readInt; 
        item_counter++; 
        break; 
       } 
       case 2: 
       { 
        readInt = bufferedReaderF.read(); 
        tmpFilm.seatsAvailable = readInt; 
        item_counter++; 
        break; 
       } 
       case 3: 
       { 
        readInt = bufferedReaderF.read(); 
        tmpFilm.price = readFloat; 
        item_counter++; 
        break; 
       } 
       case 4: 
       { 
        readInt = bufferedReaderF.read(); 
        tmpFilm.showingTime = readFloat; 
        item_counter++; 
        break; 
       } 
       case 5: 
       { 
        readInt = bufferedReaderF.read(); 
        tmpFilm.day = readInt; 
        item_counter++; 
        break; 
       } 
       case 6: 
       { 
        readInt = bufferedReaderF.read(); 
        tmpFilm.month = readInt; 
        item_counter++; 
        break; 
       } 
       case 7: 
       { 
        readInt = bufferedReaderF.read(); 
        tmpFilm.year = readInt; 
        item_counter = 0; 
        break; 
       } 
       } 

       line = bufferedReaderF.readLine(); 

       server.filmList.add(tmpFilm); 

      } 

      bufferedReaderF.close(); 

     } catch (FileNotFoundException ex) 
     { 
      System.out.println("Unable to open file '" + fileName + "'"); 
     } catch (IOException ex) 
     { 
      System.out.println("Error reading file '" + fileName + "'"); 
     } 
    } 
}` 

какие-либо идеи/помощь будет высоко оценен

EDIT добавил остальную часть кода в цикле в то время как спрошено

EDIT здесь файл я читал из

Film 1 
10 
10 
5.00 
10.30 
Wednesday 23rd 
July 
2013 
+0

ли вы уверены, что файл не пуст? –

ответ

0

Remove-

line = bufferedReaderF.readLine(); 

И прочитал в петлях

while ((line = bufferedReaderF.readLine()) != null) 

Проверьте, если файл пуст. Можете ли вы также обновить свой вопрос кодом внутри?

Исходя из вашего Edit-

Вы игнорируете то, что вы читаете в то время. Должно быть что-то вроде this-

switch (item_counter) 
{ 
    case 0: 
    { 
     tmpFilm.name = line; 
     item_counter++; 
     break; 
    } 
    case 1: 
    {      
     tmpFilm.seatsTotal = Integer.parseInt(line); 
     item_counter++; 
     break; 
    } 
    ...etc... 
+1

Эта итоговая строка не компилируется, она должна быть 'while ((line = bufferedReaderF.readLine())! = Null) {.....}'. –

+0

@JoshM Не следует. :) Я обновил. Благодарю. –

+0

@JimGarrison - Его имя переменной "bufferedReaderF". –

3

Я не знаю, если это связано с проблемой, но вы должны поставить break; заявления после каждой кодовой последовательности в вашем switch. В противном случае, если скажем item_counter равен 0, то будет выполняться код 0, а затем проваливаются и выполнить код 1, а затем в течение 2 и т.д.

+0

спасибо, что указали, что вне - я исправил это сейчас, но это wasn что вызвало проблему –

0

Попробуйте это ...

BufferedReader bufferedReaderF = new BufferedReader(new FileReader(new File(fileName))); 
line = bufferedReaderF.readLine(); 
while (line != null) 
       { 
        Film tmpFilm = new Film(); 

        switch (item_counter) 
        { 
         case 0: 
         { 
          // line = bufferedReaderF.readLine(); 
          tmpFilm.name = line; 
          item_counter++; 
          break; 
         } 
         case 1: 
         { 
          readInt=Integer.parseInt(line); 
          tmpFilm.seatsTotal = readInt; 
          item_counter++; 
          break; 
         } 
         case 2: 
         { 
          readInt = Integer.parseInt(line); 
          tmpFilm.seatsAvailable = readInt; 
          item_counter++; 
          break; 
         } 
         case 3: 
         { 
          readFloat=Float.parseFloat(line); 
          tmpFilm.price = readFloat; 
          item_counter++; 
          break; 
         } 
         case 4: 
         { 
          readFloat=Float.parseFloat(line); 
          tmpFilm.showingTime = readFloat; 
          item_counter++; 
          break; 
         } 
         case 5: 
         { 
          line=line.replaceAll("\\D",""); 
          readInt = Integer.parseInt(line); 
          tmpFilm.day = readInt; 
          item_counter++; 
          break; 
         } 
         case 6: 
         { 
          readInt = Integer.parseInt(GregorianCalendar.class.getField(line.toUpperCase()).get(line))+1; 
          tmpFilm.month = readInt; 
          item_counter++; 
          break; 
         } 
         case 7: 
         { 
          readInt = Integer.parseInt(line); 
          tmpFilm.year = readInt; 
          item_counter = 0;     
         } 
        } 

        line = bufferedReaderF.readLine(); 

        server.filmList.add(tmpFilm); 

       }