读取文件时抛出java.io.StreamCorruptedException

时间:2014-06-30 01:39:18

标签: java serialization

我使用此代码在文件内部进行读写,但此代码正在抛出(java.io.StreamCorruptedException)。我在我的代码中使用了Vector来反向读取文件(文件末尾到文件的开头)。请告诉解决方案。

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();
    }
}

1 个答案:

答案 0 :(得分:1)

如果没有特殊安排,您无法附加到ObjectOutputStreams写入的文件。有一个流标题,当ObjectInputStream出现在文件中间时,它不会理解。

保持文件打开。