java基础--Properties类及流

目录

1.Properties类

1.1概述

1.2构造方法

1.3常用方法

2.缓冲流

2.1介绍

2.2字节缓冲流

2.3字符缓冲流

2.4缓冲流总结

3.转换流

3.1编码表

3.2输出转换流OutputStreamWriter类

3.3输入转换流InputStreamReader类

3.4转换流总结

4.序列流

4.1介绍

4.2对象输出流ObjectOutputStream类

4.3对象输入流ObjectInputStream类

4.4对象操作流的作用

4.5对象操作流补充知识点

5.打印流

5.1介绍

5.2构造方法

5.3代码示例


1.Properties类

1.1概述

        Properties叫做属性集,是HashTable的子类,属于双列集合,这个集合的键和值都是字符串类型,不需要规定泛型。我们通常使用属性集和流相关的方法。

1.2构造方法

方法说明
public Properties()创建一个空的属性列表

1.3常用方法

方法说明
Object setProperty(String key,String value)添加键值对
String getProperty(String key)根据键获取值
stringPropertyNames()获取所有的键
load(输出流)把文件中的键值对数据读取到属性集中
store(输出流,String comments)把集合中的键值对保存到文件中

        集合的相关方法:

        //public Properties()  创建一个空的属性列表。
        Properties pro = new Properties();

        //Object setProperty(String key ,String value)     添加键值对
        pro.setProperty("key1", "value1");
        pro.setProperty("key2", "value2");
        pro.setProperty("key3", "value3");
        pro.setProperty("key1", "value4");  //key值相同,会覆盖
        System.out.println(pro);

        //String getProperty(String key)                   根据键获取值
        System.out.println(pro.getProperty("key1"));
        System.out.println(pro.getProperty("key2"));

        //stringPropertyNames()                            获取所有的键
        System.out.println(pro.stringPropertyNames());

        IO的相关方法:

        //构造方法 创建对象
        Properties pro = new Properties();

        //创建输入流 读取数据
        FileReader fr = new FileReader("src\\study\\properties\\test.properties");

        //load(输入流)                                      把文件中的键值对数据读到集合中
        pro.load(fr);

        //关流
        fr.close();

        //输出
        System.out.println(pro);

        //构造方法 创建对象
        Properties pr = new Properties();
        pr.setProperty("username", "玖玖");
        pr.setProperty("password", "jiujiu");
        pr.setProperty("birthday", "2022-01-22");
        pr.setProperty("年龄", "1");
        pr.setProperty("性别", "男");

        //创建输出流
        FileWriter fw = new FileWriter("src\\study\\properties\\test02.properties");

        //store(输出流,String comments)                    把集合中的键值对保存到文件中
        pr.store(fw,"输出备注");

        //关流
        fw.close();

2.缓冲流

2.1介绍

        普通流的使用效率较低,java提供了四个缓冲流用来提高前面四个普通流的效率。

FileOutputStream     -->        BufferedOutputStream
FileInputStream       -->         BufferedInputStream
FileWriter                 -->         BufferedWriter
FileReader               -->         BufferedReader

2.2字节缓冲流

        构造方法:

方法说明
public BufferedInputStream(InputStream in)创建一个字节缓冲输入流
public BufferedOutputStream(OutputStream out)创建一个字节缓冲输出流

        缓冲输出流都是会把数据先输出到缓冲区。

        提高效率,没有特殊功能

        缓冲输出流代码示例:

        //创建缓冲输出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src\\study\\bufferedStream\\test00.txt"));

        //输出一个字符
        bos.write(97);
        bos.write(13);
        bos.write(10);

        //输出一个数组
        byte[] arr = {98,65,99,66,100};
        bos.write(arr);
        bos.write("\r\n".getBytes());
        bos.write(arr,2,3);

        //刷新
        bos.flush();

        //关流
        bos.close();

        缓冲输入流代码示例:

        //创建缓冲输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src\\study\\bufferedStream\\test00.txt"));

        //输入一个字节
        System.out.println(bis.read());

        //输入一个字节数组
        byte[] arr = new byte[3];
        System.out.println(bis.read(arr));//读取到的字节个数
        System.out.println(Arrays.toString(arr));//读取到的内容

        int len;
        while ((len = bis.read(arr)) != -1){
            System.out.print(new String(arr,0,len));
        }

        //关流
        bis.close();

2.3字符缓冲流

        构造方法:

方法说明
public BufferedReader(Reader in)创建一个字符缓冲输入流
public BufferedWriter(Writer out)创建一个字符缓冲输出流

        特有方法:

方法说明
public String readLine()BufferedReader的方法,读一行文字
public void newLine()BufferedWriter的方法,写换行,由系统属性定义符号

        字符缓冲输出流代码示例:

        //创建字符缓冲输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("src\\study\\bufferedStream\\test01.txt"));

        //输出一个字符
        bw.write('我');

        //换行
        bw.newLine();

        //输出一个字符数组
        char[] arr = {'我','爱'};
        bw.write(arr);

        bw.write(arr,1,1);

        //输出一个字符串
        bw.write("java");

        bw.write("今天星期一", 2, 3);

        //刷新
        bw.flush();

        //关流
        bw.close();

        字符缓冲输出流代码示例:

        //创建字符缓冲输入流对象
        BufferedReader br = new BufferedReader(new FileReader("src\\study\\bufferedStream\\test01.txt"));

        //输入一个字符
        System.out.println((char)br.read());

        //输入一个字符数组
        char[] arr = new char[4];
        System.out.println(br.read(arr));
        System.out.println(new String(arr));

        //读取一行
        System.out.println(br.readLine());

        int len;
        while ((len = br.read(arr)) != -1){
            System.out.println(new String(arr,0,len));
        }

        //关流
        br.close();

2.4缓冲流总结

字节缓冲流

        没有特殊方法,只提高效率

字符缓冲流

        提高效率

        特殊方法:

                读取一整行        readLine()

                写出换行符        newLine()

3.转换流

3.1编码表

3.2输出转换流OutputStreamWriter类

        构造方法:

方法说明
OutputStreamWriter(OutputStream out)创建一个使用默认字符集的字符流
OutputStreamWriter(OutputStream out, String charsetName)创建一个指定字符集的字符流

        输出转换流代码演示:

        //输出转换流
        //OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("src\\study\\inputStream\\test01.txt"));
        OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("src\\study\\inputStream\\test01.txt",true),"GBK");

        //获取编码集
        System.out.println(osw.getEncoding());

        //输出一个字节
        osw.write(98);

        //输出一个字节数组
        char[] arr = {99,'你',100,'我',101,'他'};
        osw.write(arr);

        osw.write(arr,1,3);

        //刷新
        osw.flush();

        //关流
        osw.close();

3.3输入转换流InputStreamReader类

        构造方法:

方法说明
InputStreamReader(InputStream in)创建一个使用默认字符集的字符流
InputStreamReader(InputStream in,String charsetName)创建一个指定字符集的字符流

        输入转换流代码演示:

        //创建输入转换流对象
        //InputStreamReader isr = new InputStreamReader(new FileInputStream("src\\study\\inputStream\\test01.txt"));
        InputStreamReader isr = new InputStreamReader(new FileInputStream("src\\study\\inputStream\\test01.txt"),"GBK");

        //获取编码集
        System.out.println(isr.getEncoding());

        //读取一个字符
        System.out.println((char)isr.read());

        //读取一个字符数组
        char[] arr = new char[3];
        isr.read(arr);
        System.out.println(new String(arr));

        int len;
        while ((len = isr.read(arr)) != -1){
            System.out.println(new String(arr,0,len));
        }

        //关流
        isr.close();

3.4转换流总结

转换流的本质也是字符流,所以可以调用字符流的方法

转换流用于指定编码表的情况
在idea上普通流不能指定码表,默认都是UTF-8

4.序列流

4.1介绍

序列流可以操作对象。

序列化:把对象从内存保存到文件中。

反序列化:把对象从文件读取到内存中。

4.2对象输出流ObjectOutputStream类

        构造方法:

方法说明
public ObjectOutputStream(OutputStream out)创建一个对象输出流

         写出对象方法:

方法说明
public final void writeObject(Object obj)将指定对象写出

        代码示例:

        //创建对象输出流对象
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src\\study\\objectStream\\test01.txt"));

        //创建对象
        Person person = new Person("玖玖", 1);

        //输出对象
        oos.writeObject(person);

        //关流
        oos.close();

        注意:

        要想对象经过IO传递,需要实现Serializable接口。这个接口是标记型接口,没有任何方法。

        输出乱码,因为电脑没有查看对象的方式。

4.3对象输入流ObjectInputStream类

        构造方法:

方法说明
public ObjectInputStream(InputStream in)创建一个对象输入流对象

        读取对象方法:

方法说明
public final Object readObject()读取一个对象

        代码示例:

        //创建对象输入流对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src\\study\\objectStream\\test01.txt"));

        //读取对象
        Person person = (Person) ois.readObject();
        System.out.println(person);

        //关流
        ois.close();

4.4对象操作流的作用

        对象操作流作用就是输出输入对象类型,别的流都是只能操作文本。

4.5对象操作流补充知识点

        ransient关键字

                transient表示瞬态,被瞬态修饰的成员变量不会被序列化。

        private transient int age;

        serialVersionUID问题

                每个类都有一个UID编号,每次修改类,编号都会随机改变,如果类在序列化和反序列化之间编号不同,反序列化会失败。如果中间要修改这个类,需要在序列化之前手动指定一个UID。

        private static final long serialVersionUID = 1234567890987654L;

        序列化多个对象

                readObject()方法在读取到末尾的时候会直接抛出EOFException,不建议读取多次。

                如果想要保存多个对象,建议把多个对象放在一起一次保存(用集合存储)。

                代码示例:

        //创建对象输出流对象
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src\\study\\objectStream\\test02.txt"));

        //创建对象
        Person person1 = new Person("玖玖", 1);
        Person person2 = new Person("tiki", 2);
        Person person3 = new Person("饼饼", 3);
        ArrayList<Person> list = new ArrayList<>();
        list.add(person1);
        list.add(person2);
        list.add(person3);

        //输出对象
        oos.writeObject(list);

        //关流
        oos.close();
        //创建对象输入流对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src\\study\\objectStream\\test02.txt"));

        //读取对象
        ArrayList<Person> list = (ArrayList<Person>) ois.readObject();

        System.out.println(list);

        //关流
        ois.close();

5.打印流

5.1介绍

        打印流帮助程序把数据用打印的方式来输出。

5.2构造方法

方法说明
public PrintStream(String fileName)使用指定文件的文件名创建一个打印流对象

5.3代码示例

        //创建打印流对象
        PrintStream ps = new PrintStream("src\\study\\printStream\\test01.txt");

        //以打印的方式来输出,你写啥就是啥
        ps.print(97);
        ps.print(98);
        ps.print(1);
        ps.print(3.14);
        ps.print("哈哈哈");
        ps.println('a');
        ps.println('b');
        ps.println('c');

        //在控制台输出数据
        //System.out.println这个语句的底层就是使用了打印流
        //out是PrintStream的静态方法
        System.out.println("111");

        //输出语句使用ps这个对象作为打印流 改变打印位置 调用setOut方法后,System.out.println语句的输出不会打印在控制台,而是流文件中
        System.setOut(ps);

        System.out.println("玖玖");

        //关流
        ps.close();

以上就是部分Properties类以及IO流的知识点啦,后续会继续补充。各位大佬如发现有知识点错误或者有不同的建议与意见,欢迎评论、私信指正,本人才疏学浅还需向各位大佬学习,还请不吝赐教!在此感谢各位的观看!谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值