将序列化对象写入文件:(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"
- import java.io.*;
- class FileWriterDemo3
- {
- public static void main(String[] args) throws IOException
- {
- //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
- FileWriter fw = new FileWriter("demo.txt",true);
- fw.write("nihao\r\nxiexie");
- fw.close();
- }
- }