java从文件读取对象
发布网友
发布时间:2022-05-13 09:37
我来回答
共2个回答
热心网友
时间:2023-08-15 20:53
可以使用 ObjectOutputStream 将对象写入文件中,使用 ObjectInputStream 类从文件中读取出对象。
代码如下:
import java.io.EOFException;
import java.io.File;
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;
import java.util.List;
class Person implements Serializable {
private static final long serialVersionUID = -3527230407404080537L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
public class App34 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
List<Person> persons = new ArrayList<>();
persons.add(new Person("张三", 20));
persons.add(new Person("李四", 25));
File file = new File("persons.data");
// 创建文件输出流
FileOutputStream output = new FileOutputStream(file);
// 创建对象输出流
ObjectOutputStream oOutput = new ObjectOutputStream(output);
// 将整个数组列表输出至文件
oOutput.writeObject(persons);
// 或者逐个将对象输出至文件,读取时需要逐个读取
/*for (Person p : persons) {
oOutput.writeObject(p);
}*/
oOutput.close();
output.close();
// 创建文件输入流
FileInputStream input = new FileInputStream(file);
// 创建对象输入流
ObjectInputStream oInput = new ObjectInputStream(input);
// 读出整个对象列表
List<Person> persons2 = (List<Person>) oInput.readObject();
for (Person p : persons2) {
System.out.println(p);
}
// 或者逐个读取对象
/*Person p1 = null;
try {
while((p1 = (Person) oInput.readObject()) != null) {
System.out.println(p1);
}
} catch (EOFException e) {
System.out.println("读取对象结束");
}*/
oInput.close();
input.close();
}
}
热心网友
时间:2023-08-15 20:53
readObject返回值为Object对象,从表面看我们只能读取一个序列化对象,但是数组也是Object对象,所以我们可以把序列化对象数组读取出来(List等集合框架也是好的选择),这样就可以实现读取多个对象。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Test {
public Test() {
// 创建序列化的对象数组
MyData [] myDatas = new MyData[10];
// 通过循环构造每一个对象
for(int i = 0; i < myDatas.length; i++){
myDatas[i] = new MyData("数据:" + (i + 1));
}
// 对象将要保存的文件
File file = new File("C:/mydata.dat");
// 对象输出流
ObjectOutputStream out = null;
// 对象输入流
ObjectInputStream in = null;
try {
// 将数组对象写入文件
out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(myDatas);
out.flush();
out.close();
// 将数组对象从文件中读取
in = new ObjectInputStream(new FileInputStream(file));
MyData [] datas = (MyData[]) in.readObject();
for (MyData myData : datas) {
System.out.println(myData);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Test();
}
}
/**
* 序列化数据
*/
class MyData implements Serializable {
private String text = null;
public MyData(String text) {
this.text = text;
}
public String toString() {
return text;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}