2016-08-29 66 views
2

我創建了一個新文件roomChecker,它是空的。現在,當我讀它時,它會拋出一個不希望的EOFException。相反,我希望它看到,如果文件是空的,那麼它會運行if(roomFeed.size() == 0)條件下的其他兩個函數。我可以在EOFException catch子句中編寫此語句;但那不是我想要做的,因爲每當文件被讀取併到達文件結尾時,它都會執行這些功能。相反,當文件有一些數據時,它應該執行else中指定的內容。由空文件引起的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()返回0然後文件是空的否則返回> 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

相關問題