文件的读写(字节流)-TreeSet学生数据

任务描述:
使用TreeSet存储Student类的对象(包含学号、姓名、年龄三个属性)。
学生对象的排序规则为:按学号从小到大排序,每个学生的学号必须唯一;
定义方法Write(Set stuSet),将TreeSet集合中的所有学生数据存放到”d:\student.txt”文件中
要求:方法必须自己处理IO异常。
提示:将一个学生对象以字节流写入文件的方法:
创建一个StringBuffer对象,将学生的各属性值添加到StringBuffer中;
将StringBuffer对象转换为字符串;
将字符串转换为byte数组后写入文件。
定义方法Copy(),将”d:\student.txt”文件备份到”d:\backag\student.txt” 文件。
要求:每次备份均是在备份文件上添加数据。方法必须自己处理IO异常。
提示:为了记录每次操作,每次备份数据前,记录添加的时间:
使用 Date date=new Date(); 获得系统当前时间;
将该时间转换成字符串后写入文件,然后再备份当前的学生数据。

public class Student implements Comparable{
     
// 使用TreeSet存储Student类的对象(包含学号、姓名、年龄三个属性)。
// 该对象必须要实现Comparable接口,重写compareTo方法
    private String id;
    private String name;
    private int age;
    public Student() {
     
    }
    public Student(String id,String name,int age) {
     
        this.id=id;
        this.name=name;
        this.age=age;
    }
    public String toString() {
     
        return "学号:"+id+"  姓名:"+name+" 年龄"+age;
    }
    // 重写Comparable接口的compareTo方法,对学号进行比较
    // 学号大,返回值为1;学号小,返回值为-1;学号相同,返回值为0;
    public int compareTo(Object obj) {
     
        if(obj instanceof Student){
     
            Student stu=(Student)obj;
            return this.id.compareTo(stu.id);
        }
        else
            return 0;
    }
}
package edu.cafuc.final1;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class TreeSetStudents {
     
    public static void main(String[] args) throws IOException {
     
        TreeSet<Student> stuSet = new TreeSet<>();
        Student stu1 = new Student("01", "小明", 20);
        Student stu2 = new Student("02", "小杨", 19);
        Student stu3 = new Student("03", "小黄", 19);
        Student stu4 = new Student("01", "小华", 20);
        stuSet.add(stu1);
        stuSet.add(stu2);
        stuSet.add(stu3);
        stuSet.add(stu4);
        Iterator<Student> it = stuSet.iterator();
        while (it.hasNext()) {
     
            System.out.println(it.next());
        }
        write(stuSet);
        copyFile();
    }

    public static void write(Set stuSet) {
     //保存学生集合到文件
        FileOutputStream fop = null;
        try {
     
            fop = new FileOutputStream("d:\\student.txt");
            Iterator<Student> it = stuSet.iterator();
            StringBuffer sb = new StringBuffer();
            while (it.hasNext()) {
     //捕获在指定路径找不到文件异常
                sb.append(it.next() + "\r\n");
            }
            String str = sb.toString();
            byte[] b = str.getBytes();
            fop.write(b);
        } catch (IOException e) {
     
            e.printStackTrace();
        } finally {
     //无论文件是否写入成功,都应确保打开的输入流被关闭
            try {
     //捕获输入流不能关闭异常
                fop.close();
            } catch (IOException e) {
     
                e.printStackTrace();
            }
        }
    }

    public static void copyFile() {
     // 备份文件
        FileInputStream in = null;
        FileOutputStream out = null;
        try {
     //捕获在指定路径找不到文件异常
            in = new FileInputStream("d:\\student.txt");
            //打开备份目录下的student.txt,每次备份均是添加数据。
            out = new FileOutputStream("d:\\backag\\student.txt", true);//这个目录得事先建立好否则会出现“系统找不到指定的路径”
            //每次添加数据前,记录添加的时间
            Date date = new Date();
            String timeStr = date.toString() + "\r\n";
            byte[] time = timeStr.getBytes();
            out.write(time);
            //使用字节缓冲区备份当前student.txt文件中的数据
            byte[] b = new byte[1024];
            int len=0;
            while ((len = in.read(b)) != -1) {
     
                out.write(b, 0, len);
            }
        } catch (IOException e) {
     
            e.printStackTrace();
        } finally {
     //关闭输入流和输出流
            try {
     
                in.close();
                out.close();
            } catch (IOException e) {
     
                e.printStackTrace();
            }
        }
    }
}

你可能感兴趣的:(Java基础入门,java)