IO流

1.概述

    IO参照物是当前程序使用内存

    I : input 从硬盘读取数据到内存! read 读

    O : output 从内存写入数据到硬盘! write 写

    对于Java而言: 按照处理单位来看

        字节流: 所有的数据按照字节方式进行传输!

        字符流: 数据按照当前系统采用的编码集方式进行字符操作,该操作局限性很大!

                        所能操作的并且不会出现错误的文件,有且只有记事本打开无乱码的文本文件

    组合:字节输入流,字节输出流,字符输入流,字符输出流。

2.缓存概念

    缓存缓冲有什么好处?

        一般的网站,第二次打开总比第一次打开速度要快!

        第一次加载网站打开的过程中,会对当前网页一些固定资源进行保存,提高用户在访问页面时的速度,优化体验!

    开发中使用缓存缓冲可以有效地提高文件操作效率!

3. IO流分类

    class InputStream    字节输入流基类

    --|    class FileInputStream    文件操作字节输入流

    class OutputStream    字节输出流基类

    --|    class FileOutputStream    文件操作字符输入流

    class Reader    字符输入流基类

    --|    class FileReader    文件操作字符输入流

    class Writer    字符输出流基类

    --|    class FileWriter    文件操作字符输出流

    需要学习的方法: read    write

    缓冲流:

        BufferedInputStream    字节输入缓冲流

        BufferedOutputStream    字节输出缓冲流

        BufferedReader        字符输入缓冲流

        BufferedWriter    字符输出缓冲流

4.FileInputStream文件操作字节输入流

    Constructor构造方法

        FileInputStream(String filePath);    根据用户指定的文件路径创建对应的FileInputStream,文件操作输入字节流,如果文件不存在,抛出异常FileNotFoundException

    FileInputStream(File file);    根据用户指定对应文件的File类对象,创建对应的FileInputStream,如果文件不存在,抛出异常FileNotFoundException

    Method成员方法

        int read();    从文件中读取一个字节数据返回。如果读取到末尾,返回-1 EOF Of File

        int read(byte[] buf);【重点】    从文件中读取数据到缓冲数组buf中,返回值类型是从文件中读取到的字节个数,如果读取到文件末尾,返回-1,EOF Of File

        读取数据的方法,在运行过程中出现了问题,抛出异常IOException

    操作流程:

        1.明确对应文件的路径,可以选择直接给与对应的String类型路径,或者创建对应的File类对象,作为参数

        2.创建FileInputStream文件操作字节输入流,打开文件操作管道

        3.从FileInputStream对象中使用方法,读取数据

        4.关闭资源!FileInputStram类对象==>水龙头!

演示
演示
时间效率

5.FileOutputStream 文件操作字节输出流

    Constructor构造方法

        FileOutputStream(String filePath);    根据用户指定的路径,创建对应的FileOutputStream文件操作输出流对象。如果路径不合法,抛出异常FileNotFoundException。采用写入数据到文件的方式,是【删除写】!!!文件内容清空,在写入数据

        FileOutputStream(File file);    根据用户指定的File类对象,创建对应FileOutputStream文件操作输出流对象,如果路径不合法,抛出异常FileNotFoundException。采用写入数据到文件的方式,是【删除写】!!!文件内容清空,在写入数据

        FileOutputStream(String filePath, boolean append);    根据用户指定的路径,创建对应的FileOutputStream文件操作输出流对象。如果路径不合法,抛出异常FileNotFoundException。append参数是boolean类型,如果传入参数为true,表示【追加写】,在文件末尾写入数据

        FileOutputStream(File file, boolean append);    根据用户指定的File类对象,创建对应FileOutputStream文件操作输出流对象,如果路径不合法,抛出异常FileNotFoundException。append参数是boolean类型,如果传入参数为true,表示【追加写】,在文件末尾写入数据

    Method成员方法    

        void write(int b);    写入一个字节数据写入到文件中

        void write(byte[] buf);    写入一个字节数组到文件中    

        void write(byte[] buf, int off, int count);    写入一个字节数组到文件中,要求从off偏移位置开始,计数count

    操作流程:

        1. 明确对应文件的路径,可以选择直接给予对应的String类型路径,或者创建对应的File类对象,作为参数

        2. 创建FileOutputStream文件操作输出字节流,打开文件操作管道

        3. 使用FileOutputStream对象写入数据到文件中

        4. 关闭资源!!!

    注意:

        1.FileOutputStream拥有创建文件的能力,在路径合法,且对应目录有写入权限下可以创建文件

        2.区分删除写和追加写

演示

6.FileReader 文件操作字符输入流

    Constructor构造方法

        FileReader(String filePath);    根据指定路径的文件创建对应的文件字符输入流对象,如果文件不存在,抛出异常FileNotFoundException

FileReader(File file);    根据指定路径的File类对象创建文件字符输入流对象,如果文件不存在,抛出异常FileNotFoundException

    Method成员方法

    int read();    从文件中读取一个字符数据,返回值为int类型,int类型数据中有且只有低十六位是有效数据,如果读取到文件末尾返回-1 EOF End Of File

    int read(char[] buf);    从文件中读取数据到char类型缓冲数组buf,返回值是读取到字符个数。如果读取到文件末尾返回-1 EOF End Of File

    操作流程:

        1. 明确需要读取数据的文件

        2. 创建FileReader对象,打开文件操作管道

        3. 使用FileReader类对象方法,读取文件数据

        4. 关闭资源

演示

7.FileWriter文件操作字符输出流

    Constructor构造方法:

        FileWriter( String filePath);    根据用户指定的路径,创建对应的FileWriter文件操作字符输出流对象。如果路径不合法,抛出异常FileNotFoundException。采用写入数据到文件的方式,是【删除写】!!!文件内容清空,在写入数据

        FileWriter(File file);    根据用户指定的File类对象,创建对应FileWriter文件操作字符输出流对象,如果路径不合法,抛出异常FileNotFoundException。采用写入数据到文件的方式,是【删除写】!!!文件内容清空,在写入数据

        FileWriter(String filePath, boolean append);    根据用户指定的路径,创建对应的FileWriter文件操作字符输出流对象。如果路径不合法,抛出异常FileNotFoundException。append参数是boolean类型,如果传入参数为true,表示【追加写】,在文件末尾写入数据

        FileWriter(File file, boolean append);    根据用户指定的File类对象,创建对应FileWriter文件操作字符输出流对象,如果路径不合法,抛出异常FileNotFoundException。append参数是boolean类型,如果传入参数为true,表示【追加写】,在文件末尾写入数据

    Method成员方法:

        void write(int ch);    写入一个字符数据写入到文件中

        void write(char[] buf);    写入一个字符数组到文件中

        void write(char[] buf, int off, int count);    写入一个字符数组到文件中,要求从off偏移位置开始,计数count

        void write(String str);    写入一个字符串到文件中

        void write(String str, int offset, int count);    写入一个字符串到文件中,要求从offset偏移位置开始,计数count

    注意:

        1. FileWriter拥有创建文件的能力,在路径合法,且对应目录有写入权限下可以创建文件

        2. 区分删除写和追加写

演示

8.关于字节流和字符流总结

    1.套路是一样的! 明确文件 - 打开管道 - 操作文件 - 关闭资源

    2.核心方法    read 读取,输入;    write 写入,输出

    3.输出流有创建文件的能力

    4.输出流需要注意是删除写还是追加写

    5.一定要注意关闭资源!resource

9.文件拷贝对比

    9.1 字符流字节流对比

            字节流拷贝:

字节流拷贝

            字符流拷贝:

字符流拷贝

    9.2字符流操作效率问题

            单字节拷贝操作:

单字节拷贝

            缓冲数组形式操作:

缓冲数组形式操作

    有缓冲和无缓冲对比:

        1.在没有使用缓冲的情况下,每一次需要向磁盘读取一个字节数据,然后写入一个字节数据,这样会导致代码中出现太多次数的打开和关闭磁盘次数。极大影响效率!

        2.缓冲之后,我们降低了对于磁盘开启的次数,并且符合CPU操作磁盘的模式,CPU从磁盘读取数据是每次4KB

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,093评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,870评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,133评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,638评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,652评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,173评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,560评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,512评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,048评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,088评论 3 344
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,232评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,856评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,548评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,020评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,152评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,729评论 3 380
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,255评论 2 363