2016-08-29 25 views
2

新しいファイルroomCheckerが作成されましたが、これは空です。今私はそれを読んで、それは私に望ましくないEOFExceptionをスローします。代わりに、ファイルが空であれば、それはif(roomFeed.size() == 0)の状態にある他の2つの関数を実行します。私はこの文を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 else return 0ファイルが空でない2それぞれが適切なメソッドを送信した場合 –

答えて

1

すべてこの:

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

は完全な時間の無駄であり、それはあなたの空のファイルの問題には、2つの原因の一つです。あなたがそれを開くことができるようにファイルを作成し、それからそこにないファイルの元の問題に正しく対処するのではなく、別の問題を得ることは、合理的な戦略ではありません。あなたはその最後にファイルを読めばあなたはまだEOFExceptionを得ることができます。もちろん、

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

、またはファイルの場合:

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

と、次のコードでは、この:代わりに、あなたはこれを行う必要があります不完全であり、あなたはまだそれを処理する必要があります。

+0

申し訳ありませんが...私はラップする他のコードを持っていたので、あなたのロジックが動作しているかどうかを確認する前に、それを確かめてください。しかし、確かに動作します。長さの条件でファイルをチェックしてelse条件でtry/catch節を置くブロックであれば、 。 –

+0

そして、あなたのロジックからコードを修正した後では、EOFExceptionの心配はありませんでした。おそらく、ファイルが空で、クラスが予期せずにファイルの終わりに達していると思っていると思います。ファイル内にいくつかのデータがあります。ファイル自体からの読み込みが終了したので、EOFExceptionはスローされません。もう一度お手数ですが –

+0

ファイルが不完全な場合も考慮する必要があります。 – EJP

関連する問題