序列化流、随机访问流、Properties

一、随机访问流

RandomAccessFile随机访问流的最大特点是:能读能写

RandomAccessFile rw = new RandomAccessFile(new File("a.txt"), "rw");
        //rw模式:可读可写
        rw.writeInt(100);
        rw.writeDouble(3.14);
        rw.writeBoolean(false);
        rw.writeUTF("你好呀");
        rw.close();
        //怎么写的就怎么读,顺序不能乱
RandomAccessFile ra = new RandomAccessFile(new File("a.txt"), "rw");
        int i = ra.readInt();
        double v = ra.readDouble();
        boolean b = ra.readBoolean();
        String s = ra.readUTF();
        System.out.println(i);
        System.out.println(v);
        System.out.println(b);
        System.out.println(s);

此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;

RandomAccessFile rw = new RandomAccessFile(new File("a.txt"), "rw");
        rw.writeInt(100);
        rw.writeDouble(3.14);
        rw.writeBoolean(false);
        rw.writeUTF("你好呀");
        rw.close();

        RandomAccessFile ra = new RandomAccessFile(new File("a.txt"), "rw");
        //获取指针文件的位置
        long filePointer = ra.getFilePointer();
        System.out.println(filePointer);//0

        int i = ra.readInt();
        filePointer = ra.getFilePointer();
        System.out.println(filePointer);//4

        double v = ra.readDouble();
        filePointer = ra.getFilePointer();
        System.out.println(filePointer);//12

        boolean b = ra.readBoolean();
        filePointer = ra.getFilePointer();
        System.out.println(filePointer);//13

        String s = ra.readUTF();
        filePointer = ra.getFilePointer();
        System.out.println(filePointer);//24

        //设置指针的位置
        ra.seek(13);
        String s1 = ra.readUTF();
        System.out.println(s1);

二、序列化流

ObjectOutputStream序列化:把对象保存在硬盘上
ObjectInputStream反序列化:把对象读取到内存中

//把一个对象,序列化到硬盘上,有个要求,要求该类实现一个Serializable接口,然后该类的对象,才能正常序列化
//再实现了Serializable接口之后,最好再写一个 public static final long serialVersionUID = 42L;
//transient 某个成员变量不想序列化可以使用transient来修饰一下
        Student student = new Student("张三", 23);
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("student.txt"));
        out.writeObject(student);
        out.close();

        ObjectInputStream in = new ObjectInputStream(new FileInputStream("student.txt"));
        Object obj = in.readObject();
        Student stu=(Student) obj;
        System.out.println(stu.getName());
        System.out.println(stu.getAge());
  1. 存储多个对象
//一个一个的存,一个一个的去取
        Student student1 = new Student("张艺", 23);
        Student student2 = new Student("姗姗", 20);
        Student student3 = new Student("思思", 25);
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Student.txt"));
        out.writeObject(student1);
        out.writeObject(student2);
        out.writeObject(student3);
        out.close();

        ObjectInputStream in = new ObjectInputStream(new FileInputStream("Student.txt"));
        Object obj = in.readObject();
        Student stu=(Student) obj;
        System.out.println(stu.getName()+"==="+stu.getAge());
        obj = in.readObject();
        stu=(Student) obj;
        System.out.println(stu.getName()+"==="+stu.getAge());
        obj = in.readObject();
        stu=(Student) obj;
        System.out.println(stu.getName()+"==="+stu.getAge());
//我们可以将对象放到集合中,让集合序列化到硬盘上,然后去读取某个数据
        Student student1 = new Student("张艺", 23);
        Student student2 = new Student("伞伞", 27);
        Student student3 = new Student("思思", 30);
        ArrayList<Student> list = new ArrayList<>();
        list.add(student1);
        list.add(student2);
        list.add(student3);

        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Student.txt"));
        out.writeObject(list);
        out.close();

        ObjectInputStream in = new ObjectInputStream(new FileInputStream("Student.txt"));
        Object obj = in.readObject();
        ArrayList<Student> students=(ArrayList<Student>) obj;
        Student student = students.get(1);
        System.out.println(student.getName()+"==="+student.getAge());

三、properties属性集合

经常用它来读取配置文件,属于双列集合

        Properties properties = new Properties();//它规定了键值是String类型
        properties.put("aaa","bbb");
        Object aaa = properties.get("aaa");
        System.out.println(aaa);
        //用它特有的方法,来存储键值
        Properties properties = new Properties();
        properties.setProperty("凡凡","呵呵");
        String value = properties.getProperty("凡凡");
        System.out.println(value);
        //参数2:默认值,如果键没有找到对应的值,则返回默认值
        String property = properties.getProperty("啦啦", "嘟嘟");
        System.out.println(property);
  1. 从配置文件中读取配置文件的属性
public static void main(String[] args) throws IOException {
//        LinkedHashMap<String, String> map = new LinkedHashMap<>();
//        BufferedReader reader = new BufferedReader(new FileReader("User.properties"));
//        String line = reader.readLine();
//        String[] split = line.split("=");
//        map.put(split[0],split[1]);
//
//        String line1 = reader.readLine();
//        String[] split1 = line1.split("=");
//        map.put(split1[0],split[1]);
//        System.out.println(map);

        Properties properties = new Properties();
        //读取配置文件
        //要求配置文件键值用等号=连接
        properties.load(new FileReader("User.properties"));
        System.out.println(properties);
  1. 将配置文件中的属性添加到配置文件中
 Properties properties = new Properties();
        properties.setProperty("username","王五");
        properties.setProperty("password","123456");
        //把配置文件中的属性,保存到配置文件中
        properties.store(new FileWriter("haha.properties"),null);
        //参数2表示使用默认的注释,也可以自己定义注释内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值