properties 集合 打印流 输出流


1.Properties 集合
    继承于HashTable的子类
    也就是具备Map集合的特点
    键值对形式存储 键值对都是字符串 不需要写泛型限定
    是集合 和 IO技术相结合的容器

    Properties 类表示了一个持久的属性集。
    Properties 可保存在流中或从流中加载。
    属性列表中每个键及其对应值都是一个字符串。 

    常用方法:
         String getProperty(String key) 用指定的键在此属性列表中搜索属性。 
         Object setProperty(String key, String value)  调用 Hashtable 的方法 put。
         Enumeration<?> propertyNames() 遍历集合 获取key Enumeration 根据key获取值
         Set<String> stringPropertyNames() 遍历集合 获取key  Set集合 然后在获取值
         void load(InputStream inStream) 
             从输入流中读取属性列表(键和元素对)。 
         void load(Reader reader) 
             按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。 
         void store(OutputStream out, String comments) 
            将集合中的数据 存入到流中 并且保存到文件上
            String comments 备注信息 可写可不写 但是参数个数不能少 如果不写 用null代替
         void store(Writer writer, String comments) 
             以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。 
         void list(PrintStream out) 
             将属性列表输出到指定的输出流。 
         void list(PrintWriter out) 
             将属性列表输出到指定的输出流 
    特点:
        可以用于键值对形式的配置文件
        将配置信息持久化保存到文件中
        .properties 配置文件 存储都是键值对 键值对中间以等号进行分割
            

2.其他流对象
    2.1 转换流 (字符流)
        InputStreamReader
            InputStreamReader 是字节流通向字符流的桥梁
        OutputStreamWriter
            OutputStreamWriter 是字节流通向字符流的桥梁
        将字节流转成字符流 本身 是字符流
    
        字符集(编码表)
            计算机只能识别二进制数据
            为了方便应用计算机 让它可以识别各个国家的文字
            就将各个国家的文字用数字来表示 并一一对应 形成一张表
            就叫做编码表
        常见的编码表
            ASCII 美国标准信息交换码
            ISO8859-1 拉丁码表 欧洲码表
            GB2312 中国的中文编码表 
                就是在ASCII码表的基础上 进行扩容的
                char 占两个字节
                一个中文 是两个字节
            GBK 中国的中文编码表 升级版 融合了更多的文字符号
            Unicode 国际标准码 融合了多种文字
                所有的文字都是用两个字节来表示
                java语言使用的就是它
            UTF-8 最多使用三个字节代表一个字符
        在转换流创建的时候 可以加入指定字符集
        可以帮助我们解决乱码问题
        在读取的过程中 读和写 都设置为同一个字符集 就能避免出现乱码
        //byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列
        byte[] b = s.getBytes();
        System.out.println(Arrays.toString(b));
        // byte[] getBytes(Charset charset)  使用给定的 charset 将此 String 编码到 byte 序列,

        不知道用哪个流怎么办?
            通过明确两点 来确定
                1.明确源头和目的地
                    源:输入流 InputStream Reader
                    目的地:输出流 OutputStream Writer
                2.明确操作的内容是否是纯文本
                    是:字符流
                    不是:字节流
    2.2 打印流
        PrintStream 字节打印流
            可以直接操作输入流 和 文件
            该流提供了打印的方法 可以对基本数据类型 引用类型进行直接操作
        PrintWriter 字符打印流
            在web阶段 经常使用 都是用它 将数据打印到客户端浏览器上
            /*
             * PrintWriter(OutputStream out, boolean autoFlush) 
                通过现有的 OutputStream 创建新的 PrintWriter。
                autoFlush - boolean 变量;如果为 true,则 println、printf 或 format 方法将刷新输出缓冲区
             * */
    2.3 标准输入输出流
        System.in 是InputStream标准输入流 默认可以从键盘读取字节数据
        System.out 是PrintStream标准输出流 默认可以向控制台中输出数据
        System类中的静态方法
        static void setIn(InputStream in) 重新分配“标准”输入流。 
        static void setOut(PrintStream out) 重新分配“标准”输出流。 

        通过这两个方法 可以修改标准输入输出流的 源头  和 目的地

    2.4 序列流
        SequenceInputStream
        SequenceInputStream 表示其他输入流的逻辑串联。
        它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,
        接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。 


        SequenceInputStream(InputStream s1, InputStream s2) 
        通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此 SequenceInputStream 读取的字节。 

        SequenceInputStream(Enumeration<? extends InputStream> e) 
        通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。 
        
    2.5 对象流
        ObjectInputStream
        ObjectOutPutStream

猜你喜欢

转载自blog.csdn.net/weixin_42738506/article/details/81395790
今日推荐