黑马程序员—javaSE—IO流

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一、IO流之字节流
1、IO流概述及其分类
按操作的数据类型分:
字节流 – 可以操作任何文件。
字符流 – 只能操作用windows自带记事本打开不乱码的文件。(文本文件)

    按数据的流向来分;(站在程序的角度)
        输入流 -- 从文件读取数据
        输出流 -- 向文件写入数据

2、FileInputStream

    操作步骤:
        A: 创建输入流对象 -- 从文件读取数据,这个文件必须存在
            FileInputStream(File file)
            FileInputStream(String name)

        B: 从文件中读取数据
            一次读取一个字节
                int read()

            重点代码:
                int ch = 0;
                while((ch = fis.read()) != -1){
                    // 获取到了每一个字节
                }

        C: 释放资源

3、InputStream的read()方法返回值为什么是int

4、FileOutputStream

    操作步骤:
        A: 创建输出流对象 
            -- 如果文件不存在,会自动创建。
            使用如下构造:
                FileOutputStream(File file)
                FileOutputStream(String name) 
                    -- 如果存在,会把数据清空,从头再写。

            如果想追加写入,请使用下面带两个参数的构造:
                FileOutputStream(File file, boolean append) 
                FileOutputStream(String name, boolean append) 

        B: 向文件中写入数据(因为文件的基本单位就是字节,所以数据可以直接写进去)

            一次写入一个字节:
                void write(int b)

        C: 释放资源

5、FileOutputStream追加

6、字节流练习 - 拷贝图片
    操作步骤:
        创建输入流对象 -- 封装数据源
        创建输出流对象 -- 封装目的地
        读写操作
        释放资源

    一次读写一个字节的方式

7、字节流练习 - 拷贝音频文件画原理图

8、字节数组拷贝之available()方法

    一次读写一个字节数组:
        int read(byte[] bys)
        void write(byte[] bys)

9、字节数组拷贝之定义长度较小的数组

    // 读写操作
    byte[] bys = new byte[1024 * 8]; // 开发中,一般使用1024的整数倍。
    int len;
    // 读是读一个字节数组
    while((len = fis.read(bys)) != -1) { // len 表示实际读取到的字节数,如果到达流结尾,返回-1
        // 写是写入一个字节数组的一部分
        fos.write(bys, 0, len);
    }

10、字节数组拷贝之定义数组的标准格式

11、BufferedInputStream和BufferOutputStream拷贝
    没涉及缓冲流一次读写一个字节数组的方式

12、flush和close方法的区别
    flush方法,刷新缓冲区,把流里面的数据写到文件中去,流对象还是可以继续使用的。
    close方法,关闭流对象,并释放与此流有关的所有系统资源。流对象不可再使用。并且关闭之前要先刷新一下缓冲区。

13、字节流读写中文
    字节流读取中文,打印到控制台显示,有可能会乱码。
    字节流写出中文,需要把字符串转换成字节数组。

14、JDK1.6版本及其以前的版本中流的标准处理异常代码
    流操作是底层操作,异常最好抛出。(告知调用者)。将异常抛出,但保证流可以关闭掉。

    使用try{}finally{} 的格式,将代码做异常处理。

15、JDK1.7版本流的标准处理异常代码
    try(
        // 创建流对象的代码 -- 自动关闭(实现了AutoCloseable接口)
    ) {
        // 读写操作
    }
    -- 上述格式将自动关闭流对象

一、字符流

1、字符流FileReader

一次读取一个字符:
    int read()

2、字符流FileWriter
写一个字符:
void write(int c)
写一个字符串:
void write(String str)

3、字符流的拷贝
字符流必须刷新缓冲区。(文件的基本单位是字节)

int c;
while((c = fr.read()) != -1){
    fw.write(c); // 到这一步还没有写到文件上。
    // fw.flush();
}

fw.close(); // 关闭流,但要先刷新它。

4、什么情况下使用字符流
字符流 – 只能文本文件
如果是拷贝文件,效率稍稍不如字节流
如果读取或者写入一段文本数据,使用字符流

字节流 -- 操作任何文件
    图片、音视频、可运行文件等等

5、字符流是否可以拷贝非纯文本的文件

6、自定义字符数组的拷贝
char[] chs = new char[1024];
int len;
while((len = fr.read(chs)) != -1) {
fw.write(chs, 0, len);
fw.flush(); // 在合适的时候刷新缓冲区
}

7、带缓冲的字符流

String line;
while((line = br.readLine()) != null){
    bw.write(line);
    bw.newLine();
}

8、readLine()和newLine()方法

9、练习 – 将一个文本文档的文本反转,第一行和倒数第一行换,第二行和倒数第二行换。

10、LineNumberReader – 统计行号

int getLineNumber()
void setLineNumber()

二、字符流其他内容

1、装饰设计模式
研究设计模式 – 面向对象(封装、继承、多态)

2、使用指定的码表读写字符
转换流:
InputStreamReader(InpiutStream is, String charSet) – 字节流通向字符流的桥梁
OutputStreamWriter(OutputStream os, String charSet) – 字符流通向字节流的桥梁

    谁到谁的桥梁按数据流向去理解。但是,实际操作的时候都是讲字节流传入转换流的构造方法,转变为字符流。

    字符流 = 字节流 + 编码表(理解)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值