A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© blovedr 中级黑马   /  2019-1-10 14:14  /  1108 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

day09IO流
* 概述
    * I(input),O(output)其实就是数据流
    * 其实IO流就是程序中用于控制数据传输的抽象表现
* 分类
    * 以数据的流向分类:以程序为基准
        * 输入流:从外界把数据传输到程序中
        * 输出流:从程序向外界传输数据
        * 举例:
            * 用记事本打开有内容的a.txt文档:将硬盘上的a.txt文档数据传输到记事本程序中,以记事本为基准,则是输入流 : 硬盘 ---> 记事本程序
            * 将a.txt文档中的内容用记事本重新编辑成新的内容。以记事本为基准,则是输出流:记事本程序 ---> 硬盘
    * 以处理的数据类型:
        * 字节流:传输的数据是字节数据
        * 字符流:传输的数据是字符数据
    * 字节输入流 InputStream 读数据
    * 字节输出流 OutputStream写数据
    * 字符输入流 Reader
    * 字符输出流 Writer字节流1. 概述:
    1. 字节输出流:java.io.OutputStream
        * OutputStream是字节输出流的抽象类,有很多的子类,输出数据的位置和操作的字节数据各有不同
    2. 字节输入流:java.io.InputStream
        * InputStream是字节输入流的抽象类
   
2. FileOutputStream
    * 概述:对文件进行操作的字节输出流
    * 构造:
        * FileOutputStream(String path):创建一个输出流对象和定义路径的文件进行关联
        * FileOutputStream(File file)
    * 常用功能
        1. write(int by); 一次写一个字节数据
        2. write(byte[] by); 一次写一个字节数组的数据
        3. write(byte[] by, int index, int len);一次写一个字节数组的一部分
        4. close();  释放资源
    * 换行和追加写入数据
        1. 换行:  \r\n  或者  System.lineSeparator();
        2. 追加写出数据: 在输出流构造方法后加一个true

3. FileInputStream
    * 概述:对文件进行读取数据操作的字节流类
    * 构造:
        1. FileInputStream(String path): 创建一个输出流对象和指定路径的文件进行关联
        2. FileInputStream(File file) 创建一个输出流对象和指定File对象对应的文件进行关联
    * 常用功能
        1. int read() 一次读一个字节数据
        2. int read(byte[] bys) 一次读一个字节数组的数据,返回实际读取到的字节数

4. 字节流复制文件
    * 思路
        1. 用输入流关联数据源,用输出流关联数据目的地
        2. 先输入流读数据,读到数据之后输出流写出去
    * 代码实现
        * 见上课代码。字符流
1. 概述
    * 专门用于处理字符数据的类
    * 字符输入流 Reader
    * 字符输出流 Writer
2. FileReader
    * 概述:操作文本的字符输入流
    * 构造:
        1. FileRear(String path)
        2. FileRear(File file)
    * 常用功能
        1. int read() 一次读一个字符数据,返回读到的字符对应的整数值
        2. int read(char[] ch) 一次读一个字符数组的数据,返回实际读取到的长度
   
3. FileWriter
    * 概述:操作文本的字符输出流
    * 构造:
        1. FileWriter(String path)
        2. FileWriter(File file)
    * 常用功能
        1. write(String str) 一次写一个字符串
        2. write(String str, int index, int len) 一次写一个字符串的一部分
        3. write(int ch) 一次写一个字符
        4. write(char[] chs) 一次写一个字符数组
        5. write(char[] chs, int index, int len) 一次写一个字符数组的一部分
    * close和flush
        1. close:释放资源;如果缓冲区中有数据帮你刷新缓冲区。但是close之后不能再写数据。
        2. flush:将缓冲区中的数据刷到指定的文本中。刷新后还可以再继续写数据。IO异常处理
1. JDK7之前的处理
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try{
        fis = new FileInputStream("美女.jpg");
        fos = new FileOutputStream("d:\\meinv.jpg");

        byte[] bys = new byte[1024];
        int  len;
        while ((len = fis.read(bys)) != -1) {
            fos.write(bys,0,len);
        }
    } catch (IOException e) {
        
    } finally {
        try {
            if(fis!=null)
                fis.close();
        } catch (IOException e) {
        
        }   
        try {
            if(fos!=null)
                fos.close();
        } catch (IOException e) {
        
        }   
        
    }

2. JDK7之后的处理
   
    try(
        FileInputStream fis = new FileInputStream("美女.jpg");
        FileOutputStream fos = new FileOutputStream("d:\\meinv.jpg");
    ) {
   
        byte[] bys = new byte[1024];
        int  len;
        while ((len = fis.read(bys)) != -1) {
            fos.write(bys,0,len);
        }
    } catch (IOException e) {
        
    }   Properties1. 概述:
        * 本质就是一个双列集合,它集合中的数据可以很方便的通过IO流存储到文本中,保证数据的持久化
2. 常用功能
        1. String getProperty(String key)                 相当于Map中的get方法
        2. Object setProperty(String key, String value)   相当于Map中的put方法
        3.(***) load(输入流)         将指定文本中的数据加载到集合中
        4.(***)store(输出流,文档说明)        存储数据到指定文本中


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马