【Person类】
package cn.qf.test;import java.io.Serializable;public class Person implements Serializable,Comparable<Person>{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
if(this.age>o.getAge()){
return 1;
}
else if(this.age<o.getAge()){
return -1;
}
return 0;
}
}
【TestTreeSet类】
package cn.qf.test;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;public class TestTreeSet { public static void main(String[] args) throws IOException, ClassNotFoundException {
// TODO Auto-generated method stub
File file = new File("D:\\test\\object.txt");
OutputStream os = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(os);
InputStream is = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(is);
Set<Person> set = new TreeSet<>();
set.add(new Person("张三", 17));
set.add(new Person("李四", 22));
set.add(new Person("王五", 19));
set.add(new Person("赵六", 20));
set.add(new Person("田七", 15));
Iterator<Person> iterator = set.iterator();
while(iterator.hasNext()){
Person person = iterator.next();
oos.writeObject(person);
oos.flush();
System.out.println(person);
}
System.out.println("*********************************");
Person person = null;
while((person=(Person) ois.readObject() )!= null){
System.out.println(person);
}
}}
【输出异常类型】
Person [name=田七, age=15]
Person [name=张三, age=17]
Person [name=王五, age=19]
Person [name=赵六, age=20]
Person [name=李四, age=22]
*********************************
Person [name=田七, age=15]
Person [name=张三, age=17]
Person [name=王五, age=19]
Person [name=赵六, age=20]
Person [name=李四, age=22]
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2626)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1321)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at cn.qf.test.TestTreeSet.main(TestTreeSet.java:39)

解决方案 »

  1.   

    可以改为oos.writeObject(set);
    Set<Person> persons=(Set<Person>) ois.readObject();
    然后遍历persons或者使用try catch捕获java.io.EOFException异常。
      

  2.   

    大佬,你这个方法就是直接遍历Set集合了!我想从文件中边读边显示到控制台就是用到while((person=(Person) ois.readObject() )!= null)                {    System.out.println(person);  }这段代码不行,我想知道为什么不行。对象流中的readObject()方法返回的不就是对象吗!当对象不为空是让它输出为什么错啊!