关于Java中writeObject方法

本文详细介绍了如何在Java中使用writeObject和readObject方法进行对象的序列化和反序列化,包括实现Serializable接口的重要性,以及通过JFileChooser选择文件进行保存和读取的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说一下这个writeObject的使用方法。我们有时候需要把一个类的很多对象的信息写入文件中,方便二次读取,但是如果一个对象中所包含的属性太多,将这些属性信息依次写入文件所需要的代码比较繁杂,为了图省事可以用writeObject方法直接写入对象。读出来的时候可以用readObject方法直接读出来。但是需要注意的是,你用writeObject所写入的类必须要实现serilizebal接口,否则会报错:java.io.NotSerializableException:…Unknow Source。实现方法如下:

JFileChooser jfc=new JFileChooser("D:\\");//新建一个文件选择器的窗体,运行时将先打开D盘
	    jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );//选择窗体中文件类型
	    int result= jfc.showSaveDialog(jfc);
	    if (result == JFileChooser.APPROVE_OPTION)
	    {
	    	String path = jfc.getSelectedFile().getAbsolutePath();//获取用户选择路径
	    	File savefile = new File(path);
			try {
				FileOutputStream fos = new FileOutputStream(path);//新建一个文件输出流
				ObjectOutputStream oos = new ObjectOutputStream(fos);//在文件输出流上套一个对象输出流
				for(Student a:DBS.dbs) {
					oos.writeObject(a);//写入对象
				}
				oos.writeObject(null);
				oos.close();
				JOptionPane.showMessageDialog(null, "保存成功!保存路径:"+path);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}        
    }

读取

JFileChooser jfc=new JFileChooser("D:\\");
	    jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
	    int result= jfc.showOpenDialog(jfc);
	    if (result == JFileChooser.APPROVE_OPTION)
	    {
	    	String path = jfc.getSelectedFile().getAbsolutePath();
	    	DBS.dbs.clear();
	    	FileInputStream fis;
			try {
				fis = new FileInputStream(path);
				ObjectInputStream ooi = new ObjectInputStream(fis);
				Object temp;
				while((temp=ooi.readObject())!=null) {
					DBS.dbs.add((Student)temp);//读取
				}
				DBS.i = DBS.dbs.size()-1;
				JOptionPane.showMessageDialog(null, "打开成功!");
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值