问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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;
}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
获取oracle中表的表结构、约束和索引信息 若3的x次方等于二十七分之一,则3的负x次方 若x的2x-1次方=1,则x=多少。若3的x次方=27分之1,则x=多少 3的x次方=1/81,x=? ...为什么?。。。若3的x次方等于81分之一,则x等于什么??急 语文句子成分分析详解 初三英语,关于被动语态 级品飞车lo如何下载? 极品飞车全球在线(nfsol)现在可以在大陆玩么?内测完毕了?听说要个登... ...一个星期不理我了怎么办,电话也不接信息也不回,问她是不是有男人了... 从余姚西站乘几路公交车到镆剑山 浙江余姚火车站到大岐山坐哪路公交车最快 余姚凤东村到庙弄公交怎么乘? 余姚阳明西路至余姚华耀汽车检具厂座什么公交车 晚上有余姚北站到人民二院的公交车吗,末班车几点 余姚北站到余姚三职坐什么车 余姚动车站到余姚锦绣家园小区应该坐哪路公交车? 天堂里没有车来车往的歌词 从余姚客运北站到三七市镇怎么坐公交车 余姚至江北洪塘有公交车吗 余姚北到下钱村坐多少路公交车 百度地图API提供的周边搜索能不能使用自己的本地数据 开封到新乡城际公交到延津谁坐过?多少钱?最晚一班是几点? 开封到新乡城际公交多长时间?路途多远? 有谁坐过开封到新乡的城际公交吗? 开封去新乡的城际公交最后一班几点 开封有到新乡的大巴么?在哪里乘坐啊? 发车时间是什么啊?票价多少? 开封到新乡的城际公交,几点第一班,要目前最新信息 现在开封到新乡城际公交最后一班是几点?最好写清楚是哪个汽车站的! 日常生活垃圾如何分类 余姚K302公交时刻表 余姚公交车302改路线了,还有什么公交车是可以到三职的? 宁波工程学院东校区距离海边有多少公里 陆河过年除夕习俗 iphoiPhone X原彩屏显示多少钱? 换过屏幕的国行iPhoneX64G,电池98,有面容,没有原彩还能卖多少钱? 中国银行父母买的英镑转给我要手续费吗 建议现在给孩子看那些关于毒品的中华之剑记录片吗 禁毒影片:《死亡之吻》的主要内容 一个大陆禁毒防艾的关于青少年教育的电影,求片名 小学生禁毒有哪些? 小学生禁毒教育宣传片有那些?在那里可下载? 小学时学校组织大家看过哪些电影印象最深刻? 请告诉我几部关于禁毒的好影片,中国外国的都行。《门徒》除外 好看的毒品电影有哪些 昨晚梦见老姨死了,后来又给活了,我也不怕,我还抱着她,,, 周公解梦见老姨生了个女儿 梦见老姨喊我的名字说爸爸叫弟弟捅死了,还看到好像是四条好几米的鱼? 梦见自己老姨有病和别人吵架 刚梦见老姨姨夫在我以前住的房子?