2016-08-29 3 views
2

Я создал новый файл roomChecker который пуст. Теперь, когда я его читаю, это бросает мне EOFException, что нежелательно. Вместо этого я хочу, чтобы он увидел, что если файл пуст, он будет запускать другие две функции, которые находятся в состоянии if(roomFeed.size() == 0). Я мог бы написать это заявление в разделе EOFException catch; но это не то, что я хочу сделать, потому что тогда каждый раз, когда файл будет считаться и доходит до конца файла, он будет выполнять эти функции. Вместо этого, когда файл имеет некоторые данные, он должен делать то, что указано в другом месте.EOFexception, вызванный пустым файлом

File fileChecker = new File("roomChecker.ser"); 
if(!fileChecker.exists()) { 
    try { 
     fileChecker.createNewFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     System.out.println("Unable to create new File"); 
    } 
} 

try(FileInputStream fis = new FileInputStream("roomChecker.ser"); ObjectInputStream ois = new ObjectInputStream(fis)) { 
    roomFeed = (List<roomChecker>) ois.readObject(); 
    System.out.println("End of read"); 
    if(roomFeed.size() == 0) { 
     System.out.println("your in null if statement"); 
     defaultRoomList(); 
     uploadAvailableRooms(); 
    } else { 
     for(int i=0; i<roomNumber.size(); i++) { 
      for(int j=0; j<roomFeed.size(); i++) { 
       if((roomNumber.get(i)).equals(roomFeed.get(i).getRoomNumSearch())){ 
        System.out.println("Reach Dead End for now"); 
       } else { 
        defaultRoomList(); 
        uploadAvailableRooms(); 
       } 
      } 
     } 
    } 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} 
+0

Когда вы создаете файл в первый раз, напишите ему пустой список. – jtahlborn

+0

fileChecker.length() return 0 then file is empty else return> 0 файл не пустой два, если затем отправить соответствующие методы для каждого –

ответ

1

Все это:

if(!fileChecker.exists()) { 
    try { 
     fileChecker.createNewFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     System.out.println("Unable to create new File"); 
    } 
} 

является пустой тратой времени, и это один из двух возможных причин для вашей пустой проблемы файла. Создание файла так, чтобы вы могли его открыть, а затем получить другую проблему вместо правильной работы с исходной проблемой файла, не являющейся рациональной стратегией. Вместо этого, вы должны сделать это:

if (fileChecker.isFile() && fileChecker.length() == 0) { 
    // file is zero length: bail out 
} 

и, в следующем коде, это:

try(FileInputStream fis = new FileInputStream(fileChecker); ObjectInputStream ois = new ObjectInputStream(fis)) { 
    // ... 
} 
catch (FileNotFoundException exc) { 
    // no such file ... 
} 
// other catch blocks as before. 

Конечно, вы все равно можете получить EOFException, если вы читаете файл в его конце, или файл является неполным, и вам все равно нужно это обработать.

+0

Извините ... чтобы вы ждали утверждения ответа, так как у меня был другой код для обертывания до того, чтобы увидеть, работает ли ваша логика ... но да, это действительно работает. Что я сделал, так это было по умолчанию в первом случае, если блок, где вы проверяете файл с условием длины, а затем кладете предложение try/catch в другое условие .. –

+0

И не беспокоиться об EOFException, это не появилось после того, как я исправил свой код из вашей логики. Думаю, он всегда появляется, если файл пуст, и класс считает, что он, возможно, дошел до конца файла неожиданно .. один раз файл имеет некоторые данные внутри него, он не будет генерировать исключение EOFException, поскольку оно закончило чтение из самого файла .. Еще раз спасибо за помощь. –

+0

Вам все равно придется рассмотреть случай, когда файл является неполным. – EJP

Смежные вопросы