程序地带

2021-1-15作业(流)



1.问题描述

首先D盘根目录下创建students.txt文件(没有D盘或其它特殊情况的同学可以选择在其它盘符下创建)。


接收控制台输入的学生信息实例化学生对象Student,将对象装入ArrayList集合中。使用对象流能够将集合写入students.txt文件,也要能从students.txt文件中反序列化得到集合,进而获得学生的信息。


完成复制students.txt功能。复制后的文件与students.txt放在相同目录下,名为students拷贝.txt。


2.效果图:

在这里插入图片描述


3.评分规则

(1)在D盘(或其它盘)创建students.txt文件(4分) (2)学生类代码正确(5分) (3)主菜单正确(见图,选择“3,退出”之前可以反复选择前2项完成功能)(10分) ①循环(3分) ②分支(3分) ③退出功能实现(2分) ④数字输入错误有提示(2分) (4)向文件中写入学生信息功能实现(12分) ①读取分割学生信息(3分),根据信息实例化学生对象并初始化(2分) ②学生对象加入集合(2分) ③将集合写入文件(5分) (5)读文件显示学生信息实现(9分) ①正确从文件中读出集合(5分) ②遍历集合输出学生详细信息(4分) (6)选择“3,退出”结束循环后,完成文件的复制(15分) ①成功复制students.txt,复制后的文件为students拷贝.txt(代码5分,效果5分)


代码如下
public class Test {
static Scanner sc = new Scanner(System.in);
static ArrayList<Student> list = new ArrayList<Student>();
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
File file = new File("D:\student.txt");
file.createNewFile();
out:while(true) {
System.out.println("请选择序号:1.向文件中写入学生信息 2.读文件显示学生信息 3.退出");
int num = sc.nextInt();
switch(num) {
case 1:
write();
break;
case 2:
read();
break;
case 3:
break out;
default:
System.out.println("请输入正确的数字");
break;
}
}
copy();
}
public static void write() throws FileNotFoundException, IOException {
System.out.println("请输入学生的姓名,年龄和性别 逗号分隔");
String str = sc.next();
String[] split = str.split(",");
String name = split[0];
String age = split[1];
String gender = split[2];
list.add(new Student(name,Integer.parseInt(age),gender));
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\student.txt"));
oos.writeObject(list);
oos.flush();
if(oos!=null) {
oos.close();
}
}
public static void read() throws FileNotFoundException, IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\student.txt"));
List<Student> list = (List<Student>) ois.readObject();
for (Student student : list) {
System.out.println(student);
}
}
public static void copy() throws IOException {
FileInputStream fs = new FileInputStream("D:\student.txt");
FileOutputStream fo = new FileOutputStream("D:\student拷贝.txt");
byte[] bs = new byte[50];
int num = 0;
while((num = fs.read(bs))!=-1) {
fo.write(bs, 0, num);
}
System.out.println("复制完成");
}
}
class Student implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int age;
private String gender;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
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;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "姓名:" + name + ", 年龄:" + age + ", 性别:" + gender;
}
}

1.问题描述

模仿公司之间,数据信息传递,读取并解析“人员信息.txt”文件内容中的人员信息,放入到相应的对象中,通过序列化写入文件中,然后再通过反序列化读取内容。


2.评分规则

(1)在项目根目录下创建“人员信息.txt”文件 写入以下内容,直接创建即可(5分) 文件内容: 张三,男,22,齐齐哈尔,8000.0 李四,女,4,哈尔滨,7000.0 王五,男,26,大庆,9000.0 赵六,女,25,佳木斯,8500.0 (2)根据数据含义,自行设计【员工类】,用于存储解析的数据和序列化保存(5分) (3)创建测试类,在main方法中读取并解析数据,将每一条员工信息保存到对象中(用BufferReader类完成) ① 正确读取txt文件的每一行记录(5分) ② 将获取的每一行记录进行解析,并保存到实例化的员工对象中(提示:每一行的字符串用“,”分割)(正确解析4分,保存对象中3分,共7分) ③ 用序列化方式,将每行实例化的员工对象保存到项目路径“employee.txt”文件中。(5分) (4)在main方法中通过对象反序列化技术读取“employee.txt”文件中的内容,还原员工对象信息,并输出到控制台。(5分) 效果图: 在这里插入图片描述


public class Test2 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
BufferedReader reader = new BufferedReader(new FileReader("人员信息.txt"));
String str = null;
while((str = reader.readLine())!=null) {
String[] split = str.split(",");
String name = split[0];
String gender = split[1];
String age = split[2];
String address = split[3];
String sal = split[4];
Emp emp = new Emp(name,gender,Integer.parseInt(age),address,Double.parseDouble(sal));
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("employee.txt"));
oos.writeObject(emp);
oos.flush();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("employee.txt"));
Emp emp2 = (Emp)ois.readObject();
System.out.println(emp2);
}
}
}
class Emp implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String gender;
private int age;
private String address;
private double sal;
public Emp() {
super();
// TODO Auto-generated constructor stub
}
public Emp(String name, String gender, int age, String address, double sal) {
super();
this.name = name;
this.gender = gender;
this.age = age;
this.address = address;
this.sal = sal;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "Emp [name=" + name + ", gender=" + gender + ", age=" + age + ", address=" + address + ", sal=" + sal
+ "]";
}
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51023834/article/details/112689474

随机推荐

eNSP实验二(静态综合)

实验要求实验过程1.打开eNSP软件,新建拓扑,建立如上模型,由于AR4和AR5缺少接口,所以AR4和AR5分别右击设置,将2FE...

芸瑶 阅读(556)

MYSQL注入总结

目录简介联合注入报错注入盲注攻击次数二次注入约束攻击堆叠注入绕过魔术引号mysql读写函数mysql注入函数mysql注入符号mysql注入语句待补充内容简介目前的web大多是前后端分离,...

Rocky_x 阅读(139)

VIM的使用

VIM的使用正常来说,linux会自动安装VIM,如果没有的话,我们可以登陆管理员账户,使用yum-yinstallvim来进行安装。VIM总共...

weixin_44490353 阅读(505)

为什么薄膜干涉的厚度要很小_薄膜干涉,薄膜厚度?

海冬由薄膜产生的干涉。薄膜可以是透明固体、液体或由两块玻璃所夹的气体薄层。入射光经薄膜上表面反射后得第一束光,折射光经薄膜下表面反射,又经上表面折射后得第二束光࿰...

weixin_39755890 阅读(808)