zoukankan      html  css  js  c++  java
  • 2020.12.15 IO流,字节流,字符流,流异常处理

    IO流
    1.什么是IO流
    *流(数据):字节或字符,一个字符=两个字节
    *内存:临时存储作用
    *输入和输出是以内存为基准:硬盘数据进入内存就是输入,数据从内存出去进硬盘就是输出。
    *读取和写入是以硬盘为基准:硬盘数据进入内存就是读取,数据存内存出去进硬盘就是写入。
    |
    2.IO流分类
    *输入流:把数据从设备上读取到内存当中
    *输出流:把内存中的数据写入到设备中
    |
    数据类型分类
    *字节流:以字节为单位
    *字符流:以字符为单位
    |
    4.IO流顶级父类

    *
    *
    *
    字节流
    1.一切皆为字节
    一切文件,图片数据都是字节,字节流可以传输任意形式的数据。底层传输的是二进制
    |
    2.文件字节输出流:FileOutputStream
    *是所有字节输出流的父类
    构造方法
    作用:1.创建一个FileOutputStream对象
    ------2.在对应的文件路径上创建一个文件,文件以及存在就清空,不存在就创建
    ------3.把FileOutputStream对象指向创建好的文件
    FileOutputStream(File file)--->提前创建一个file类对象,传入对象
    FileOutputStream(String name)--->直接传入要把文件创建在什么位置,或者指向哪个文件
    api方法
    1.关闭流----->流对象.close();--->关闭流的时候会自动刷新缓冲区
    2.刷新------->流对象.flush();--->目的就是把缓冲区的数据存到数据中
    3.数组写入--->流对象.write(byte[] byte);---->把数组中的数据一个一个的输入到数组当中
    4.数组分段写入-->流对象.write(byte[] byte,int off,int len);--->从off位置开始,截取长度为len写到文件中
    5.写入数据--->流对象.write(int b);--->把b数据写到文件中
    |
    FileOutputStream使用步骤
    1.构造一个FileOutputStream对象,指向一个地址使得创建一个文件
    2.调用FileOutputStream对象的write方法
    3.调用FileOutputStream对象的close方法释放资源
    |
    实现追加书写
    FileoutputStream(File file;boolean append);创建文件输入流,以写入指定的file对象(也可以直接写地址字符串),如果aeeendtrue,保存原油数据继续追加,如果appendfalse,清空原有数据,重新书写
    追加换行操作:" "---> 到本行行首,,, 换到下一行
    *
    *
    *
    文件字节输入流:FileInputStream
    目的:把文件里面的数据读取到内存中
    |
    构造方法
    FileInputStream(File file);打开与实际文件存在的连接,创建一个FileInputStream对象,文件由系统中File对象file命名。(通过file对象)
    FileInputStream(String name);打开与实际文件存在的连接,创建一个FileInputStream对象,文件由系统中文件的路径name命名。(通过文件路径名)
    |
    api方法
    关闭流-->流对象.close()
    读取单个数据---->流对象.read()--->返回一个int类型值
    读取数组------->流对象.read(byte[] byte)--->返回int是读取数据个数,byte的长度表示每次读取几个字节
    使用步骤
    1.创建FileInputStream对象,指定读取文件,必须存在,不存在就报错
    2.调用方法FileInputStream对象的read方法
    3.关闭流;FileInputStream对象的close方法
    |
    文件复制步骤
    1.先用字节输入流,写入文件的路径,用read方法读取出来
    2.创建字节输出流,写入要复制到哪里的路径,用write方法写入文件
    3.关闭流的时候先开后关,后开的先关
    代码演示

    *
    *
    *
    字符流(和字节最大大的区别就是,可以搞汉字不乱码)
    当我们使用字节流的时候遇到中文字符,可能不会显示完整的字符。一个字符可能占用多个字节存储,所以java中提供了字符流类,以字符为单位来读写数据,处理大文件的时候好用啊
    |
    字符输入流【Reader】
    抽象类用于表示,读取字符流的所有类超类,可以读取字符信息到内存当中,它定义了字符输入流的基本共性方法:
    *public void close();关闭输入流,并且释放与此流相关的其他系统资源。
    *public int read();从输入六种提取一个字符
    *public int read(char[] char);从输入流中一次性读取多个字符,并存储到字符数组char中
    |
    FileReader类
    备注:

    1. 字符编码:字节与字符的对应规则,idea中文编码是【utf-8】
    2. 字节缓冲区:一个字节数组,用来临存储字节数据
      2.步骤
    3. 创建一个File对象
    4. 把创建的对象当做参数传入FileReader参数中,创建FileReader对象
    5. 使用read方法读取文件数据
    6. 愚弄close方法关闭流释放资源

      |
      字符输出流【writer】
      抽象类时表示用于输出字符流,的所有类的超类,将指定的字符信息写入到目的地当中,它定义了字符串输出流的基本共性API方法
      *void writer(int c);写入单个字符
      *void write(char[] char);写入字符串数组
      *abstract void writer(char[] char,int off,int len); 写入char数组的一部分,从off位置开始,写len那么多字符
      *void write(String name);写入字符串
      *void write(String str,int off,int len);写入一段字符串,off开始len那么长
      *void flush();刷新
      *void clase();关闭之前先刷新
      FileWriter类
      写入字符到文件里面
      构造方法
      *FileWriter(File file);创建一个新的FileWriter,指定file文件写入数据
      *FileWriter(String name);创建一个FileWriter对昂,指定写的的食宿及放在哪里
      使用步骤
    7. 创建一个FileWriter对象,并指定地址值
    8. 使用FileWriter的writer方法,把数据写到缓冲区里面(字符串转为自洁的过程)
    9. 使用FileWriter的flush把内存缓冲区的数据写到文件里面
    10. 释放资源(会把缓冲区的数据放到文件里面 )
      flush和close的区别
      flush:刷新缓冲区,刷新之后流还可以继续使用
      close:先刷新缓冲区,然后关闭流

    如果不关闭流也不刷新,那么数据就在缓冲区里面没有写入文件中,关闭流之后就没办法继续写数据了,想要继续写,有想写道文件里面就用flush

    注意:字符流只能操纵文本文件,不能操作图片,视频等,所以淡村的箱操作文本文件就使用字符流,其他情况就是字节流
    *
    *
    *
    IO异常处理
    JDK1.7之前:使用try...catch....finally处理IO异常
    格式:
    try{
    //可能出现异常代码
    }catch(异常类型 变量名){
    //异常处理
    }finally{
    //一般是释放资源,必备执行
    }
    |
    JDK1.7之后:使用try(){}...caytch(){}------》又称为try-with-resource,保证每个资源在语句结束之后会自动关闭。资源就是resource---》程序完成后必须要关闭的对象,也是会自动释放流
    格式
    try(定义流对象,多个用分号隔开){
    //可能出现异常的代码
    }catch(异常类型 异常变量){
    //异常处理逻辑
    }
    |
    代码

  • 相关阅读:
    loading加载动画
    js获取文本的行数
    获取浏览器结尾生成的参数,提交的时候对其做判断
    js获取当前浏览器地址栏的链接,然后在链接后面加参数
    a链接在新窗口打开
    js随机出现2个数字
    css进行中打点效果
    jqeury显示前几个,隐藏后几个,点击后隐藏前几个显示后几个
    jQuery 源码解析(七) jQuery对象和DOM对象的互相转换
    jQuery 源码解析(六) $.each和$.map的区别
  • 原文地址:https://www.cnblogs.com/tushao/p/14176637.html
Copyright © 2011-2022 走看看