zoukankan      html  css  js  c++  java
  • day29_properties&各种流

    • 属性集【Properties】
    • 缓冲流【Buffered】
    • 转换流【字符<--->字节】

    属性集【Properties】

    java.util.Properties类继承自Hashtable用来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应的值都是一个字符串

    构造方法

    • ​ public Properties():创建一个空的属性集列表

    共性的API方法

    ​ public Object setProperty(String key,String value):保存一对属性

    ​ public String getProperty(String key):使用此属性列表中的指定的键来搜索对应的值

    ​ public Set stringPropertyNames():获取所有键的名称并封装到Set集合中

    		//创建属性集对象  通过无参构造
            Properties properties = new Properties();
            //添加键值对元素
            properties.setProperty("size","1222");
            properties.setProperty("name","abc");
            properties.setProperty("address","D:\abc.txt");
            System.out.println(properties);
    
            //通过键获取值
            System.out.println(properties.get("size"));
            System.out.println(properties.getProperty("address"));
            
            //遍历该属性集
            Set<String> keys = properties.stringPropertyNames();
            for (String key : keys) {
                System.out.println(key+"="+properties.getProperty(key));
            }
    
    与流相关的方法
    • ​ public void load(InputStream input):从字节输入流中读取键值对
    • ​ public void load(Reader reader):从字符输入流中读取键值对

    参数中使用了字节输入流,通过流对象,关联到某个文件上,这样就可以加载文件中的数据,文件中的数据格式应该写成:key=value 例如:

    date=小苏 
    size=12000 
    name=abc.txt
    	    FileReader fr = new FileReader("C:\Users\42123\Desktop\abc.txt");
            Properties properties = new Properties();
            properties.load(fr);
            Set<String> keys= properties.stringPropertyNames();
            for (String key : keys) {
                System.out.println(key+"="+properties.getProperty(key));
            }
    	   fr.close();
    
    • ​ public void store(OutputStream output,String comments):把集合当中的数据写入字节输出流中
    • ​ public void store(Writer writer,String comments):把集合当中的数据写入字符输出流中

    可以使用Properties集合当中的store方法,把集合当中的临时数据,持久化写入到硬盘当中

    	   FileWriter fr1 = new FileWriter("C:\Users\42123\Desktop\abc.txt",true);
            Properties properties1 = new Properties();
            properties1.setProperty("四大名著1","红楼梦");
            properties1.setProperty("四大名著2","西游记");
            properties1.setProperty("四大名著3","三国演义");
            properties1.setProperty("四大名著4","水浒传");
            properties1.store(fr1,"此处是注释、请悉知!!!");
            fr1.close();
    		//可以重复写入多个相同的键值对,但是读取的时候并不会重复显示,是因为Properties集合存储的key唯一(自动去重,元素更新)
    

    缓冲流【Buffered】

    ​ 缓冲流:可以理解为对原来的使用数组方式进行数据传输的一种增强

    ​ 按照类型分类:

    • ​ 字符缓冲流 BufferedReader,BufferedWriter

    • ​ 字节缓冲流 BufferedInputStream ,BufferedOutputStream

      缓冲流的基本原理:在创建流对象的时候,会先创建一个内置的默认大小的缓冲区数组,通过缓冲区来读写数据,减少系统IO操作次数,减少性能开销,提高程序读写效率

    字节缓冲流【速度比正常操作快】

    构造方法:

    • ​ public BufferedInputStream (InputStream input):创建一个新的字节缓冲输入流
    • ​ public BufferedInputStream(InputStream in, int size):
    • ​ public BufferedOutputStream (OutputStream output):创建一个新的字节缓冲输出流,写入到指定的字节输出流中
    • ​ public BufferedOutputStream (OutputStream output,int size):创建一个新的字节缓冲输出流,并将具有指定缓冲区大小的数据写入到字节输出流中

    字符缓冲流

    构造方法:

    • ​ public BufferedWriter(Writer out):创建一个新的字符缓冲输出流
    • ​ public BufferedReader(Reader in):创建一个新的字符缓冲输入流
    • ​ public BufferedWriter(Writer out,int size ):
    • ​ public BufferedReader(Reader in,int size):

    特有方法:

    • ​ BufferedReader : public String readLine():读取整行文本信息
    • ​ BufferedWriter : public void newLine():写入一行的行分隔符,由系统属性定义换行符号
    		BufferedWriter bfw = new BufferedWriter(new FileWriter("C:\Users\42123\Desktop\abc.txt", true));//写入
    
            bfw.write("
    我今天很开♥");
            bfw.newLine();       //另起一行
            bfw.write("你说你不要脸");
            bfw.flush();
            bfw.close();
    
            BufferedReader bfr = new BufferedReader(new FileReader("C:\Users\42123\Desktop\abc.txt"));     //读取 
            char[]crr = new char[1024];
            int len =0;
            while ((len = bfr.read(crr))!=-1){
                System.out.println(new String(crr,0,len));
            }
            bfr.close();
        }
    
    	    String str = null;      //readLine()方法
            while((str=bfr1.readLine())!=null){
                System.out.println(str);
            }
    

    转换流【字节流<--->字符流(字符集之间相互转换)】

    字符编码:

    • ​ 按照某种规则将字符存储到计算机中,这个过程称为编码;反之,将存储为在计算机中的二进制数按规则解析显示出来,称之为解码。编码和解码过程必须使用同一规则,否则导致乱码。

    ​ 字符编码:就是一套自然语言与二进制数之间的对应规则

    • 字符集:是一个系统可支持的所有字符的集合,包括各国文字、标点符号、图形符号、数字等,也称为编码表

      计算机中要准确的存储和识别各种文字的字符符号,需要进行字符编码,一套字符集至少有一套字符编码

    常见的字符编码集有:ASCII GBK Unicode

    • ASCII字符集:基于拉丁字母的一套编码系统,用于显示现代英语;基本的ASCII字符集,使用7位表示一个字符,共128个字符;ASCII的拓展字符集,使用8位表示一个字符,共256个字符

    • ISO-8859-1字符集:拉丁码表,别名---Latin-1,用于显示欧洲使用的语言,包括荷兰、丹麦、德国、意大利、西班牙等语言;使用单字节码表,兼容ASCII编码

    • GB字符集:包括GB2312(简体中文码表),里面含有7000多个简体汉字,此外数学符号、罗马希腊的字母、日本的假名也编进去了,连在ASCII里的数字、标点、字母都统统收录。采用两个字节编码;GBK是最常用的中文编码表,在GB2312的基础上进行拓展。使用双字节编码,共收录了21000多个汉字,完全兼容GB2312,支持繁体汉字、日韩文字等;GB18030是最新的中文码表,共收录70000多个汉字,采用多字节编码,每个字可以由1个字节、2个字节、4个字节组成,支持国内少数民族文字,同时也支持繁体字以及日韩汉字等

    • Unicode字符集:为表达任意语言的任意字符而设计的,业界的一种标准,也称为统一码表、标准万国码表;它最多使用4个字节的数字来表示每个字母、符号、或者文字,有三种常见的编码方案:UTF-8、UTF-16、UTF-32;UTF-8编码表,用来表示Unicode标准中的任意字符。编码规则:

      ​ 1.128个US-ASCII字符,使用一个字节

      ​ 2.拉丁字母,两个字节

      ​ 3.汉字,三个字节

      ​ 4.极少数辅助字符采用四个字节编码

    编码引发的问题

    ​ 由于编码规则不一致,引发乱码现象

    如何在读取GBK编码的文件呢?

    InputStreamReader类

    转换流java.io.InputStreamReader是Reader的子类,它是从字节流到字符流的一个桥梁,它读取字节,并使用指定的字符集将其解码为字符,它的字符集可以有名称指定,或使用平台默认字符集

    构造方法:

    • ​ public InputStreamReader(InputStream in):创建一个使用默认字符集的字符流
    • ​ public InputStreamReader(InputStream in,String charsetName):创建一个指定字符集发字符流

    OutputStreamWriter类

    转换流java.io.OutputStreamWriter是Writer的子类,是字符流到字节流的一个桥梁,使用指定的字符集将字符编码为字节,字符集可以手动指定,也可以使用平台默认的字符集

    构造方法

    • ​ public OutputStreamWriter(OutputStream out):创建一个使用默认字符集的字符流
    • ​ public OutputStreamWriter(OutputStream in,String charsetName):创建一个指定字符集发字符流
  • 相关阅读:
    springboot @value 注解的使用
    Django时间时区问题(received a naive datetime while time zone support is active
    乐观锁与悲观锁
    Django 从入门到放弃
    根据数据库表生成 model 类
    Django CSRF攻击
    Django的orm的 数据库查询语法大全
    js常用函数、书写可读性的js、js变量声明...
    Web Worker
    css编写规范
  • 原文地址:https://www.cnblogs.com/mitoris/p/14146525.html
Copyright © 2011-2022 走看看