第十五天:对象流EOFException的异常捕获

来源:互联网 发布:单片机毕业设计题目 编辑:程序博客网 时间:2024/05/20 03:38
需求:
 *1、创建54张扑克牌,将扑克牌写入文件card.txt
 *2、将写入的文件内容,读取出来,可以生成相对应的54张扑克牌
 *3、保证扑克牌可以调用自己的方法 

 遇到的问题以及解决方法:

1.序列化的问题:你要创建的对象在流中传输,必须将此类对象进行序列化,就是implements Serializable接口

2.EOFException的问题: 你从文件中读取对象的时候,如何判断是否读取完毕。jvm会给抛出EOFException,表示的是,文件中对象读取完毕。所以呢,你在判断是否读取结束的时候,捕获掉这个异常就可以,是捕获不是抛出。

重要的说三次,是捕获,捕获,捕获!

代码如下:


package day02;import java.io.EOFException;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;/** *1、创建54张扑克牌,将扑克牌写入文件card.txt *2、将写入的文件内容,读取出来,可以生成相对应的54张扑克牌 *3、保证扑克牌可以调用自己的方法  */public class Exercis {public static void main(String[] args) throws FileNotFoundException, IOException {ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream(new File("./card.txt")));List<Card> lists=new ArrayList<Card>();for(int i=Card.THREE;i<=Card.TWO;i++){lists.add(new Card(Card.HEITAO,i));lists.add(new Card(Card.HONGTAO,i));lists.add(new Card(Card.MEIHUA,i));lists.add(new Card(Card.FANGKUAI,i));}lists.add(new Card(Card.JOKER,Card.BLACK));lists.add(new Card(Card.JOKER,Card.COLOR));for(Card c : lists){os.writeObject(c);}ObjectInputStream is=new ObjectInputStream(new FileInputStream(new File("./card.txt")));while(true){Object o = null;try {o = is.readObject();if(o instanceof Card){System.out.println(o);}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch(EOFException e){System.out.println("读写完毕!");os.close();is.close();break;}}}}


原创粉丝点击