我使用此代码在文件内部进行读写,但此代码正在抛出(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();
}
}
答案 0 :(得分:1)
如果没有特殊安排,您无法附加到ObjectOutputStreams写入的文件。有一个流标题,当ObjectInputStream出现在文件中间时,它不会理解。
保持文件打开。