在文件中写入和读取对象
Posted
技术标签:
【中文标题】在文件中写入和读取对象【英文标题】:Write and read object to and from file 【发布时间】:2017-02-03 13:15:57 【问题描述】:我想读取一个对象并将其写入文件。这是我的尝试:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
public class SaveOpen implements Serializable
private static String fileName;
private ArrayList<Person> list = new ArrayList<Person>();
public SaveOpen()
fileName = "file.txt";
//Reader
public static Object deserialize() throws IOException,
ClassNotFoundException
FileInputStream fis = new FileInputStream(fileName);
BufferedInputStream bis = new BufferedInputStream(fis);
ObjectInputStream ois = new ObjectInputStream(bis);
Object obj = ois.readObject();
ois.close();
return obj;
//Writer
public static void serialize(Object obj)
throws IOException
FileOutputStream fos = new FileOutputStream(fileName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.close();
public void setFileName(String fileName)
this.fileName = fileName;
public ArrayList<Person> getListPersons()
return list;
但是,我不知道这是否是正确的方法,也不知道如何在类中实现它。该对象是Person
,我想从文件中保存和读取该对象。是否应该对.txt
文件进行处理?有谁能把事情说清楚?谢谢!
【问题讨论】:
如果您使用流序列化对象,那么您写入的是二进制数据,而不是文本,因此您不应写入.txt
文件。
没有什么可以阻止您将其写入.txt
文件,但这表明内容是文本,但它们不是。
docs.oracle.com/javase/8/docs/technotes/guides/serialization
【参考方案1】:
如果您希望文件易于阅读,我建议将其保存为 xml。
例子:
对象类
import java.io.Serializable;
public class Person implements Serializable
private String username;
private int id;
public String UserName() return username;
public void setUserName(String str) username = str;
public int ID() return id;
public void setID(int ID) id = ID;
-序列化器/反序列化器
import Settings.Person;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class XmlSerializer
//File path to serialize to and deserialize from
private static final String SERIALIZED_FILE_NAME = "yourSavePath.xml";
//Insert person object and save as xml file to chosen filepath
public static void Serialize(Person person)
try
FileOutputStream os = new FileOutputStream(SERIALIZED_FILE_NAME);
XMLEncoder encoder = new XMLEncoder(os);
encoder.writeObject(person);
encoder.close();
catch(FileNotFoundException ex)
System.out.println(ex.getMessage());
//Deserialize xml file into person object
public static Person Deserialize()
try
FileInputStream os = new FileInputStream(SERIALIZED_FILE_NAME);
XMLDecoder decoder = new XMLDecoder(os);
Person p = (Person)decoder.readObject();
decoder.close();
return p;
catch(FileNotFoundException ex)
System.out.println(ex.getMessage());
return null;
【讨论】:
【参考方案2】:你已经做对了。您可以在 txt 文件中保护对象,尽管这没有多大意义,我宁愿使用二进制文件。
要将多个对象存储在一个文件中,只需将它们打包到一个集合中,然后序列化该集合对象。
从文件中读取对象时,通过 instanceof 检查其类并将其强制转换为任何类型。
【讨论】:
以上是关于在文件中写入和读取对象的主要内容,如果未能解决你的问题,请参考以下文章