由空文件

时间:2016-08-29 02:20:03

标签: java file

我创建了一个空文件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();
}

1 个答案:

答案 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