2014-06-30 48 views
-2

我正在使用此代碼讀取和寫入文件,但此代碼正在拋出(java.io.StreamCorruptedException)。我在我的代碼中使用了Vector來反向讀取文件(文件結尾到文件開頭)。請告訴解決方案。讀取文件時拋出java.io.StreamCorruptedException

import java.awt.Toolkit; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.EOFException; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.Vector; 

import javax.swing.JOptionPane; 
import javax.swing.JTable; 



class Data implements Serializable { 


    private static final long serialVersionUID = 1L; 
    private String time; 
    private String note; 

    public Data(String time, String note) { 
     this.time=time; 
     this.note=note; 
    } 

    public String getTime() { 
     return time; 
    } 

    public String getNote() { 
     return note; 
    } 
} 




public class S { 

    public static void rt(String time, String note) { 
     try 
     { 
      ObjectOutputStream w = new ObjectOutputStream(new FileOutputStream("file.cer",true)); 
      w.writeObject(new Data(time,note)); 
      w.close(); 
     } 
     catch(Exception exp) { 
      Toolkit.getDefaultToolkit().beep(); 
      JOptionPane.showMessageDialog(null, String.format("ERROR = %s\nCLASS = S", exp.getClass())); 
      System.exit(0); 
     } 
    } 


    public static void rd() { 

     Vector v = new Vector(); 
     Object[][] data = new Object[100][3]; 
     String columns[] = {"S.No","NOTES","TIME RECORDS"}; 
     JTable timeRocords = new JTable(data,columns); 
     Data d; 

     try 
     { 
      ObjectInputStream r = new ObjectInputStream(new FileInputStream("file.cer")); 

      for(int i=1; i<=100; i++) { 
       try { v.add(r.readObject()); } 
       catch(EOFException exp){ 
        r.close(); 
        break; 
       } 
      } 
      for(int i=0; i<v.size(); i++) { 
       d = (Data)v.elementAt(i); 
       System.out.println(d.getNote()+" "+d.getTime()); 
      } 
     } 

     catch(Exception exp) { 
      Toolkit.getDefaultToolkit().beep(); 
      JOptionPane.showMessageDialog(null, String.format("ERROR = %s\nCLASS = S", exp.getClass())); 
      System.exit(0); 
     } 
    } 

    public static void main(String arg[]) { 
     rt("90:50:50:90","recent"); 
     rt("99:59:59:99","late"); 
     rd(); 
    } 
} 
+2

例外的一個要點是,它告訴你哪裏出了問題,哪裏,但是你不認爲這與你的問題有關? – John3136

回答

1

如果沒有特殊安排,您不能附加到由ObjectOutputStreams編寫的文件。當它出現在文件的中間時,ObjectInputStream不會理解它的流頭。

保持文件打開。

相關問題