Java序列化和文件的输入/输出

将序列化对象写入文件

序列化对象写入文件过程图

  1. 创建出FileOutputStream对象
FileOutputStream fileStream=new FileOutputStream("MyGame.ser");
  1. 创建ObjectOutputStream对象`
ObjectOutputStream os=new ObjectOutputStream(fileStream);
  1. 写入对象
os.writeObject(obj);
  1. 关闭ObjectOutputStream
os.close();

注:

  1. 如果某对象中含有一个非序列化的对象实例,则该对象也不能序列化
  2. 如果某实例变量不能或不应该被序列化,就把它标记为transient(瞬时)的

解序列化:还原对象

解序列化过程图

ObjectInputStream is=new ObjectInputStream(new FileInputStream("MyGame.ser"));
Object a=is.readObject();
  1. 对象从stream中读出来
  2. Java虚拟机通过存储的信息判断对象的class类型
  3. Java虚拟机尝试寻找和加载对象的类,如果没找到则抛出异常
  4. 新的对象会配置在堆上,构造函数不会执行
  5. 如对象在继承树上有个不可序列化的祖先类,则该不可序列化类及在它之上的类的构造函数就会执行
  6. 对象的实例变量会被还原成序列化时点的状态值。transient变量会被赋值为null的对象引用或primitive主数据类型的默认值0、false

java.io.File class

你可以对File对象做的事情:

  1. 创建出代表现存盘文件的File对象
File f=new File("MyCode.txt");
  1. 建立新的目录
File dir=new File("Chapter1");
dir.mkdir();
  1. 列出目录下的内容
if(dir.isDirectory()){
    String[] dirContents=dir.list();
    for(int i=0;i<dirContents.length;i++){
        System.out.println(dirContents[i]);
    }
}
  1. 取得文件或目录的绝对路径
System.out.println(dir.getAbsolutePath);
  1. 删除文件或目录(成功会返回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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值