出现java.io.EOFException 求教!!

importjava.io.*;importjava.util.*;classfile{Filef=null;FileInputStreamfips=null;Objec... import java.io.*;
import java.util.*;
class file
{
File f=null;
FileInputStream fips=null;
ObjectOutputStream oops=null;
public file()throws Exception{
f=new File("d:"+File.separator+"resource.txt");
if(!f.exists())
f.createNewFile();
fips=new FileInputStream(f);
oops=new ObjectOutputStream(new FileOutputStream(f));
if(fips.read()==-1){
fips.close();
List<Person> l=new ArrayList<Person>();
oops.writeObject(l);
oops.close();
}
}
public void save(Object o)throws Exception{
ObjectOutputStream oops1=null;
oops1=new ObjectOutputStream(new FileOutputStream(f));
@SuppressWarnings("unchecked")
List<Person> per=(List<Person>)this.load();
per.add((Person)o);
oops.writeObject(per);
oops.close();
}
public Object load()throws Exception{
ObjectInputStream oips=new ObjectInputStream(new FileInputStream(f));
@SuppressWarnings("unchecked")
List<Person> per2=(List<Person>)oips.readObject();
oips.close();
return per2;
}
}

public class main
{
public static void main(String[] args)throws Exception
{
file f=new file();
f.save(new Person("小明",12));
f.save(new Person("小红",11));
}
}
出现java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Sourc
e)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at file.load(file.java:33)
at file.save(file.java:25)
at main.main(main.java:6)
求高手指点!!!!!
展开
 我来答
wangjia4202
2011-06-14
知道答主
回答量:15
采纳率:0%
帮助的人:0
展开全部
你断点调试一下,你的构造 方法里面的if(fips.read()==-1)里面的语句是得不到执行的。
所以,那个文件里面根本没有写入空的List,你用readObject去取就会出错。

我运行了一下,断点后,发现了一个错误:
在你load之前,你首先实例化了一个output,可能这里出错了。
下面是正常运行的,你自己对比下:
Person类我就没有贴了。

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

class TestFile {
String f = null;

FileInputStream fips = null;

ObjectOutputStream oops = null;

public TestFile() throws Exception {
f = "d:" + File.separator + "resource.txt";
File fi = new File(f);
if (!fi.exists()){
fi.createNewFile();
oops = new ObjectOutputStream(new FileOutputStream(fi));
List<Person> l = new ArrayList<Person>();
oops.writeObject(l);
oops.flush();
oops.close();
}
}

public void save(Object o) throws Exception {
@SuppressWarnings("unchecked")
List<Person> per = (List<Person>) this.load();
per.add((Person) o);
oops = new ObjectOutputStream(new FileOutputStream(f));
oops.writeObject(per);
oops.close();
}

public Object load() throws Exception {
ObjectInputStream oips = new ObjectInputStream(new FileInputStream(f));
@SuppressWarnings("unchecked")
List<Person> per2 = (List<Person>) oips.readObject();
oips.close();
return per2;
}

public static void main(String[] args) throws Exception {
TestFile f = new TestFile();
f.save(new Person("小明", 12));
f.save(new Person("小红", 11));
}
}
就烦条0o
2018-07-06 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46493
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致异常。
看你的代码,估计是socket没有正确创建,建议调用之前先检查socket的状态,状态正确再调用getInputStream。好久没有用socket,记得不清楚了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轻捷且通顺丶饼干4048
2011-06-14 · TA获得超过6.4万个赞
知道大有可为答主
回答量:3.4万
采纳率:0%
帮助的人:4424万
展开全部
对象序列化后才可能写入文件,在model上加个serializable接口,此接口什么都不用实现,就是一标记,然后就是文件不存在在创建时先调用写的方法,相当于存放一个序列化好的空对象,要不会出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-06-13
展开全部
那是IO异常,估计是路径不对的原因。
更多追问追答
追问
路径没问题
追答
两种原因:
1、文件结尾了还继续读文件,就导致这个错误抛出。本来EOF的数值就是-1,但是是一种用于错误标识的记号
2、你读取的数据类型有int、float、boolean、double这几种,如果你所读取的文件中没有某种类型的数据就会有这样的情况
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dmeigcv
2011-06-20 · TA获得超过1804个赞
知道小有建树答主
回答量:1761
采纳率:0%
帮助的人:273万
展开全部
内部类BlockDataInputStream.的方法peekByte抛出的异常,意思就是到达了文件的末尾,程序却没有正常结束读取文件内容,你可以单步调试一下,走debug试试···············
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式