MyException - 我的异常网
当前位置:我的异常网» J2SE » 对象ObjectInputStream的文件操作,报java.io.Strea

对象ObjectInputStream的文件操作,报java.io.StreamCorruptedException错误(3)

www.MyException.Cn  网友分享于:2013-12-12  浏览:661次

ObjectOutputStream是不能append的(magic number问题),必须把以前的取出来重新再放一遍,不然读的时候会抛java.io.StreamCorruptedException 

ObjectInputStream的readObject()方法也不会返回null,除非你写入null,他只会抛java.io.EOFException 异常

------解决方案--------------------
探讨
首先谢谢你!
你这样写,加上
if(file.exists()){
file.delete();
}
下一次写得时候就会把上一次写入的内容删掉,这样的话就不能追加了。去掉
if(file.exists()){
file.delete();
}
每次读的时候只能读到第一次写得。
有没有更好的方法。

------解决方案--------------------
把读、写操作抽象为了两个方法
调用代码在 main 方法中

Java code
 
package com.qq.server;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
Test test = new Test();
QQ qq = new QQ(1, "231", "fds", "fds", "sadf", 3213, "fdsaf", "fdsafsd");
System.out.println("新增的QQ :" + qq + "\n");

test.saveDataToFile("qq.txt", qq);

System.out.println("保存后的数据:");
List <QQ> list = test.getDataFromFile("qq.txt");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}

/**
* 写数据
*
* @param filePath
* @param newQQ
*/
public void saveDataToFile(String filePath, QQ newQQ) {
List <QQ> qqs = getDataFromFile(filePath);
FileOutputStream fos = null;
ObjectOutputStream oos = null;

qqs.add(newQQ);
try {
File file = new File(filePath);
if (file.exists()) {
file.delete();
}
fos = new FileOutputStream(file, false);
oos = new ObjectOutputStream(fos);
for (int i = 0; i < qqs.size(); i++) {
oos.writeObject(qqs.get(i));
}
oos.writeObject(null);
oos.flush();
oos.reset();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

/**
* 读数据
*
* @param filePath
* @return
*/
public List <QQ> getDataFromFile(String filePath) {
List <QQ> qqs = new ArrayList <QQ>();
FileInputStream fis = null;
ObjectInputStream ois = null;

try {
File file = new File(filePath);
if (!file.exists()) {
file.createNewFile();

// 第一次执行时,因为没有数据,所以强行加入一个结束符号
FileOutputStream fos = new FileOutputStream(file, true);
fos = new FileOutputStream(file, true);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(null);
oos.flush();
oos.close();
}
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
QQ qq = null;
while ((qq = (QQ) ois.readObject()) != null) {
qqs.add(qq);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有