我创建了一个空文件roomChecker
。现在当我读它时,它会抛出一个EOFException,这是不可取的。相反,我希望它看到,如果文件为空,那么它将运行其他两个if(roomFeed.size() == 0)
条件的函数。我可以在EOFException catch子句中写这个语句;但这不是我想要做的,因为每次当文件被读取并到达文件末尾时,它将执行这些功能。相反,当文件有一些数据时,它应该执行else中指定的操作。
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 :(得分: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
。