出现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)
求高手指点!!!!! 展开
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)
求高手指点!!!!! 展开
展开全部
你断点调试一下,你的构造 方法里面的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));
}
}
所以,那个文件里面根本没有写入空的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));
}
}
展开全部
EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致异常。
看你的代码,估计是socket没有正确创建,建议调用之前先检查socket的状态,状态正确再调用getInputStream。好久没有用socket,记得不清楚了。
看你的代码,估计是socket没有正确创建,建议调用之前先检查socket的状态,状态正确再调用getInputStream。好久没有用socket,记得不清楚了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对象序列化后才可能写入文件,在model上加个serializable接口,此接口什么都不用实现,就是一标记,然后就是文件不存在在创建时先调用写的方法,相当于存放一个序列化好的空对象,要不会出错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-06-13
展开全部
那是IO异常,估计是路径不对的原因。
更多追问追答
追问
路径没问题
追答
两种原因:
1、文件结尾了还继续读文件,就导致这个错误抛出。本来EOF的数值就是-1,但是是一种用于错误标识的记号
2、你读取的数据类型有int、float、boolean、double这几种,如果你所读取的文件中没有某种类型的数据就会有这样的情况
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
内部类BlockDataInputStream.的方法peekByte抛出的异常,意思就是到达了文件的末尾,程序却没有正常结束读取文件内容,你可以单步调试一下,走debug试试···············
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询