2016-08-29 4 views
2

새 파일 roomChecker이 비어 있습니다. 이제 그것을 읽을 때 그것은 바람직하지 않은 EOFException을 던졌습니다. 대신 파일이 비어 있다면 if(roomFeed.size() == 0) 조건에있는 다른 두 함수를 실행합니다. 이 문은 EOFException catch 절에 작성할 수 있습니다. 하지만 그것은 내가하고 싶은 일이 아니기 때문에 파일이 읽혀지고 파일의 끝에 도달 할 때마다 그 기능을 실행할 것입니다. 대신 파일에 데이터가 있으면 else에 지정된 것을 수행해야합니다.빈 파일로 인한 EOF 예외

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 파일이 비어있는 경우 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 
} 

을이 : 당신은 그것의 끝으로 파일을 읽을 경우, 또는 당신은 여전히 ​​EOFException를 얻을 수 있습니다 물론

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

파일의 경우 불완전하고 여전히 처리해야합니다.

+0

에 대해 적절한 메소드를 보내 주시면 죄송합니다 ... 랩핑 할 다른 코드가 있으므로 응답 승인을 기다리게 해주십시오. 당신의 논리가 작동하는지 확인하기 전에 ...하지만 네가 실제로 작동하는지 .. 내가 무엇을했는지는 길이 조건을 가진 파일을 검사 한 블록에서 첫 번째 기본 조건을 넣은 다음 다른 조건에서 try/catch 절을 넣는 것입니다. –

+0

그리고 당신의 논리에서 내 코드를 수정 한 후에도 EOFException에 대해 걱정할 필요가 없습니다. 아마도 파일이 비어 있고 클래스가 예기치 않게 파일 끝에 도달했을 가능성이 있다고 생각하면 항상 나타납니다. 파일 자체 안에 일부 데이터가 있습니다. 파일 자체에서 읽기를 마쳤으므로 EOFException을 throw하지 않습니다. 도움을 다시 주셔서 감사합니다. –

+0

파일이 불완전한 경우를 고려해야합니다. – EJP