JAVA中 序列化和文件的输入/输出问题

将序列化对象写入文件:(1) 创建出FileOutputStream: FileOutputStream fileStream=new FileOutputStream("MyGame.ser");   //如果文件不存在,它会自动被创建出来
                                            (2)创建ObjectOutputStream: ObjectOutputStream os=new ObjectOutputStream(fileStream);
                                       (3)写入对象: os.writeObject(characterOne); os.writeObject(characterTwo);
                                      (4)关闭ObjectOutputStream: os.close();

FileOutputStream将字节写入文件,ObjectOutputStream把对象转换成可以写入串流的数据,当我们调用ObjectOutputStream的writeObject时,对象会被打成串流送到FileOutputStream来写入文件。
当对象被序列化时,被该对象引用的实例变量也会被序列化。且所有被引用的对象也会被序列化。

如果要让类能被序列化,就要实现 Serializable:     
import java.io.*;                     
public class Box implements Serializable{};

如果某实例变量不能或不应被序列化,就把它标记为transient(瞬时)的:class Chat implements Serializable{transient String currentID;这个变量将不会被序列化 }

解序列化:(1)创建FileInputStream: FileInputStream fileStream=new FileInputStream("MyGame.ser");
                 (2)创建ObjectInputStream: ObjectInputStream os=new ObjectInputStream(fileStream);
                 (3)读取对象: Object one =os.readObject();    Object two= os.readObject();  //每次调用readObject()都会从stream中读出下一个对象,读取顺序和写入顺序相同
                 (4)转换对象类型: GameCharacter elf=(GameCharacter) one ;  GameCharacter two=(GameCharacter) two;
                 (5)关闭ObjectInputStream: os.close();

将字符串写入文本文件:import java.io.*;
                                    class WriteAFile{
                                       public static void main(String[] args){
                                       try{       //输入/输出相关的操作都必须包在try/catch块中
                                         //要想在文件后续写则需在文件路径后加上true
                                        FileWriter writer=new FileWriter("FOO.txt",true); writer.write("hello!");writer.close();       //BufferedWriter writer=new BufferedWriter(new FileWriter("FOO.txt"));
                                   } catch(IOException ex){ex.printStackTrace();}                                                                         它的效率更好
                                   }
                                   }
读取文本文件:将Writer换成Reader; String line=null;line=reader.readLine();
可以用String的split()解析:String toTest="ABC+EDF/RIGHT";  String[] result=toTest.split("/"); String a=result[0]; String b=result[1];//a="ABC+EDF";   b="RIGHT"

  1. import java.io.*;  
  2. class  FileWriterDemo3  
  3. {  
  4.     public static void main(String[] args) throws IOException  
  5.     {  
  6.   
  7.         //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。  
  8.         FileWriter fw = new FileWriter("demo.txt",true);  
  9.         fw.write("nihao\r\nxiexie");  
  10.         fw.close();  
  11.     }  
  12. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值