2016-04-22 18 views
1

ファイル(クラスの同じオブジェクト)から、Serializableを使用してオブジェクトを読み取ろうとしていますが、すべてのオブジェクトを読み取るとエラーIOException,java.io.ObjectInputStream$BlockDataInputStream.peekByteが返されます。ファイルから複数の同じオブジェクトを読み取る方法

私はオブジェクトを読んで、リストに保存しています。しかし、それが到達すると、EOFと言えばエラーを投げます。ここで

は私の方法である:

private static void updateBook(String name) { 
    // TODO Auto-generated method stub 
    FileInputStream fis = null; 
    ObjectInputStream in = null; 
    Object obj = new Object(); 
    List<Object> libb = new ArrayList<Object>(); 
    File file = new File(name + ".ser"); 
    if (file.exists()) { 
     try { 
      fis = new FileInputStream(file); 
      in = new ObjectInputStream(fis); 
      try { 
       while (true) { 

        obj = in.readObject(); 
        libb.add(obj); 
       } 
      } catch (OptionalDataException e) { 
       if (!e.eof) throw e; 
       //JOptionPane.showMessageDialog(null, "Done!"); 
      } finally { 
       in.close(); 
       //fis.close(); 
      } 

      for(int j = 0; j < libb.size(); ++j) { 
       Book li = new Book(); 

       li = (Book) libb.get(j); 
       System.out.println(li.getBookName()); 
      } 
      // 

     } catch (IOException e) { 
      e.printStackTrace(); 

     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } else { 
     System.out.println("\nThe file does not Exist!"); 
    } 
} 

誰がwhile(true)からこのエラーを回避する方法を教えてくださいすることができます。

コンプリートエラー:

java.io.EOFException 
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source) 
at java.io.ObjectInputStream.readObject0(Unknown Source) 
at java.io.ObjectInputStream.readObject(Unknown Source) 
+0

の可能性のある重複した[?完全にJavaでのファイルからのオブジェクトのストリームを読み込むための最良の方法は何ですか](HTTP: //stackoverflow.com/questions/5046033/what-is-the-best-way-to-fully-a-stream-of-objects-from-a-file-in-java) – aribeiro

+0

@aribeiroその異なる、なぜなら私はfinally節を持っていて、まだEOFエラーが出ているからです。 – Erjan

+0

真ですが、 'EOFException'のキャッチはありません。 – aribeiro

答えて

0

あなたが追加する必要があります:EOFExceptionとして

catch (EOFException e){ 
    // do stuffs 
} 

がキャッチされていません。あなたがEOFExceptionのためのcatch句が欠落しているあなたのtry声明で

+0

'breakはループの外側では使用できません。 ' – Erjan

+0

yeah - ' while'ループの位置を認識しませんでした – mani

1

try { 
    while (true) { 

     obj = in.readObject(); 
     libb.add(obj); 
    } 
} catch (OptionalDataException e) { 
    if (!e.eof) throw e; 
    //JOptionPane.showMessageDialog(null, "Done!"); 
} catch (EOFException eofe) { 
    // treat it as you like 
} finally { 
    in.close(); 
    //fis.close(); 
} 
関連する問題