将序列化对象写入文件
- 创建出FileOutputStream对象
FileOutputStream fileStream=new FileOutputStream("MyGame.ser");
- 创建ObjectOutputStream对象`
ObjectOutputStream os=new ObjectOutputStream(fileStream);
- 写入对象
os.writeObject(obj);
- 关闭ObjectOutputStream
os.close();
注:
- 如果某对象中含有一个非序列化的对象实例,则该对象也不能序列化
- 如果某实例变量不能或不应该被序列化,就把它标记为transient(瞬时)的
解序列化:还原对象
ObjectInputStream is=new ObjectInputStream(new FileInputStream("MyGame.ser"));
Object a=is.readObject();
- 对象从stream中读出来
- Java虚拟机通过存储的信息判断对象的class类型
- Java虚拟机尝试寻找和加载对象的类,如果没找到则抛出异常
- 新的对象会配置在堆上,构造函数不会执行
- 如对象在继承树上有个不可序列化的祖先类,则该不可序列化类及在它之上的类的构造函数就会执行
- 对象的实例变量会被还原成序列化时点的状态值。transient变量会被赋值为null的对象引用或primitive主数据类型的默认值0、false
java.io.File class
你可以对File对象做的事情:
- 创建出代表现存盘文件的File对象
File f=new File("MyCode.txt");
- 建立新的目录
File dir=new File("Chapter1");
dir.mkdir();
- 列出目录下的内容
if(dir.isDirectory()){
String[] dirContents=dir.list();
for(int i=0;i<dirContents.length;i++){
System.out.println(dirContents[i]);
}
}
- 取得文件或目录的绝对路径
System.out.println(dir.getAbsolutePath);
- 删除文件或目录(成功会返回true)
bloolean isDeleted=f.delete();
写入文本文件
BufferedWriter writer=new BufferedWriter(new FileWriter(aFile));
读取文本文件
try {
File myFile=new File("MyText.txt");
//FileReader是字符连接到文本文件的串流
FileReader fileReader=new FileReader(myFile);
//将FileReader链接到BufferedReader以获取更高的效率。它只会在缓冲区读空的时候才会回头去磁盘读取
BufferedReader reader=new BufferedReader(fileReader);
String line=null;
while((line=reader.readLine())!=null) {
System.out.println(line);
}
reader.close();
}
catch(Exception e) {
e.printStackTrace();
}