2010-05-21 123 views
0

我們有一個應用程序需要我們使用反序列化動態讀取文件(.dat)中的數據。實際上,我們獲取第一個對象,並在使用「for」循環訪問其他對象時拋出空指針異常。從.dat文件中檢索數據

  File file=null; 
      FileOutputStream fos=null; 
      BufferedOutputStream bos=null; 
      ObjectOutputStream oos=null; 
      try{ 
       file=new File("account4.dat"); 
       fos=new FileOutputStream(file,true); 
       bos=new BufferedOutputStream(fos); 
       oos=new ObjectOutputStream(bos); 
       oos.writeObject(m); 
       System.out.println("object serialized"); 
       amlist=new MemberAccountList(); 
       oos.close(); 
      } 
      catch(Exception ex){ 
      ex.printStackTrace(); 
      } 

閱讀對象

try{ 
     MemberAccount m1; 
     file=new File("account4.dat");//add your code here 
     fis=new FileInputStream(file); 
     bis=new BufferedInputStream(fis); 
     ois=new ObjectInputStream(bis); 
     System.out.println(ois.readObject()); 
     **while(ois.readObject()!=null){ 
     m1=(MemberAccount)ois.readObject(); 
      System.out.println(m1.toString()); 
     }/*mList.addElement(m1);** // Here we have the issue throwing null pointer exception 
     Enumeration elist=mList.elements(); 
     while(elist.hasMoreElements()){ 
      obj=elist.nextElement(); 
      System.out.println(obj.toString()); 
     }*/ 

    } 
    catch(ClassNotFoundException e){ 

    } 
    catch(EOFException e){ 
     System.out.println("end"); 
    } 
    catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
+0

可能重複[如何讀取追加模式文件(.DAT)數據(http://stackoverflow.com/questions/2880498/how-to - 讀取 - 數據 - 從文件-DAT-在-附加模式) – McDowell 2010-05-21 14:16:51

回答

1

問題是while循環:

while(ois.readObject()!=null){ 
    m1=(MemberAccount)ois.readObject(); 
    System.out.println(m1.toString()); 
} 

您正在閱讀從流的對象,檢查它是否不爲空,然後再閱讀從流。現在,流可以爲空,返回null。

你可以代替這樣做:

while(ois.available() > 0){ 
    m1=(MemberAccount)ois.readObject(); 
    System.out.println(m1.toString()); 
}