Java中IO流——字符流

前言: 上一篇博客,主要讲解了IO流中字节流的知识点和一些补充知识,而这篇则主要讲解下IO流中字符流的知识点。

1.字符流

  概述: 字符流=字节流+编码表。因为字节流对于汉字之类的处理很不方便,汉字在通过任何的编码存储时,都会占用两个及以上字节,且第一个字节为负数,因此java提供了字符流来更方便的解决此类问题。(字符流只能处理文本文件)
编码表(了解即可):
Ascall值:
在这里插入图片描述

GBKXXX:
在这里插入图片描述

Unicode字符表:
在这里插入图片描述

  注意事项:采用何种规则编码,就要采用对应规则解码,否则会出现乱码。

2.字符流的解码和编码(转换流)

首先我们先了解字符串中的解码和编码:
编码:

  • byte[] getBytes();将String转换为字节数组;
  • byte[] getBytes(String charsetName);通过指定的字符集将String转换为字节数组;

解码:

  • String( byte[] bytes);将指定字节数组转换为String;
  • String( byte[] bytes,String charsetName);通过指定的字符集将字节数组转换为String;

字符流中的解码与编码
在这里插入图片描述

  InputStreamReader是用于将得到的字节以特定的解码形式字符输出出来;OutputStreamWriter主要用于将得到的字符写进计算机中 ,以特定的编码字节形式(其中构造方法参数类型为字节类型InputStream和OutputStream);

3.读与写数据方式

写数据的五种方式:
在这里插入图片描述
  注意事项:进行写字符时候,是因为其中是通过OutputStreamWriter中字符缓冲区中去,所以需要对进行刷新流,存在于FileOutputStream里进行操作;

读数据的两种方式:
在这里插入图片描述
读与写的改进版:
在这里插入图片描述

  当不需要进行指定的解码或者编码类型时,可以采用它们的子类更为方便。

4.字符缓冲流(首先考虑)

在这里插入图片描述
  概述: 其中字节流跟字符流差不多道理,作为缓冲区,来提高效率,但实际操作都是通过字符流的Read类和Wirter类进行。
特有方法:在这里插入图片描述
  说明:其中第一个方法主要用于面对不同系统是换行,第二个方法只读数据,不包含换行符。

5.刷新流方式

  首先每次进行流操作后,需要进行关闭流,释放资源;而刷新流也是必要的,不进行刷新流会导致数据导入不进,出现问题。所以刷新流和关闭流时必要的,希望大家成为一种习惯。
在这里插入图片描述

6.总结

在这里插入图片描述

7.重要案例

复制多级文件夹
  思路: 首先复制多级文件夹则需要知道文件夹中所存在的路径,对于路径可以创建File类来获得其路径名,再通过其路径名复制到该指定的路径中,如果是其文件夹则可以通过File类中的mkdir()方法创建其文件夹,如果是文件则通过缓冲字节流来进行创建加复制。
部分代码展示:

   //根据数据源创建字符缓冲输入流对象
   BufferedReader br = new BufferedReader(new FileReader("myCharStream\\ConversionStreamDemo.java"));
        //根据目的地创建字符缓冲输出流对象
        BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\Copy.java"));

        //读写数据,复制文件
        //一次读写一个字符数据
//        int ch;
//        while ((ch=br.read())!=-1) {
    
    
//            bw.write(ch);
//        }

        //一次读写一个字符数组数据
        char[] chs = new char[1024];
        int len;
        while ((len=br.read(chs))!=-1) {
    
    
            bw.write(chs,0,len);
        }

        //释放资源
        bw.close();
        br.close();

复制文件的异常处理:
在这里插入图片描述

  推荐使用JDK7的可以处理构造和释放资源时两个异常;JDK9只能处理释放资源时的异常。

猜你喜欢

转载自blog.csdn.net/weixin_46870007/article/details/121224578