JavaSE总结(9)IO流(1)

一、IO流:

IO流: input输入(流向内存) 读取数据

         output输出(流出内存) 写出数据

IO流作用

       可以将程序(内存)中的数据 写出硬盘上

       也可以将硬盘上文件中的数据 读取到程序(内存)中

IO流分类

按照操作的数据不同

   字节流

   每次操作字节,由于计算机中任何数据都是由字节构成的,所以字节流可以操作计算机中一切数据。

   文本 视频 音频 图片 压缩包....都可以使用字节流来操作

   字符流

   每次操作的是字符,只能操作文本文件。

   文本文件:用记事本打开能够看懂 不乱码的文件 .txt .html .css .java

   需要注意 word excel 不是文本文件


按照数据流向不同

       输入流

       输出流

    字节输入流

        InputStream  read  读字节

        FileInputStream

    字节输出流

        OutputStream write 写字节

        FileOutputStream

    字符输入流

       Reader  read 读字符

       FileReader

    字符输出流

       Writer  write 写字符

       FileWriter

    IO流的命名规则

       前半部分 说明这个流能够做什么

       后半部分 是这个流的父类是谁


二、java.io.OutputStream::

java.io.OutputStream  字节输出流的超类  抽象类

方法

   write(int b) 写一个字节

   write(byte[] bytes) 写一个字节数组

   write(byte[] bytes,int start ,int length) 写字节数组的一部分

   close() 关闭资源 因为读写操作调用了操作系统的功能 需要告知操作系统我完事了

常用子类

   FileOutputStream

       构造方法 绑定数据目的

           FileOutputStream(File file)

           FileOutputStream(String name)

           参数

               File对象 字符串路径

     如果没有指定的文件 则新建一个文件 如果指定位置的文件已经存在 则覆盖

1.创建字节输出流对象H

2.调用write方法

3.关闭资源


三、文件的续写和换行:

续写

FileOutputStream

构造方法

    FileOutputStream(String path,boolean append)

    FileOutputStream(File file,boolean append)

    boolean append: 默认值是false 不写默认是false 覆盖文件

如果值为true 则续写文件

换行

    就在数据前 或者 后 加上\r\n

    \r回车符

    \n 换行符

out.write("我的真心话\r\n".getBytes());

//换行写在引号里面


四、java.io.InputStream 字节输入流的超类 抽象类

方法

    int read() 读一个字节

    int read(byte[] bytes) 读一个字节数组

    close() 关闭资源

常用子类

    FileInputStream

    构造方法 绑定 数据源

            FileInputStream(String path)

            FileInputStream(File file)

    参数

            String路径

            File对象

1.创建字节输入流对象

2.调用read方法读数据

3.关闭资源

int read(byte[] bytes) 读一个字节数组

字节数组作用: 起到缓冲的作用 用来提高效率 保存读取到的数据

返回值:返回每次读取的有效字节数


五、复制:

先开后关,先关后开。

创建数据目的时,可以改复制的文件的名字。

字节数组复制,效率远远高于字节复制。一般数组的长度定义为【1024】,1024*100左右效率最高,再大的话创建数组也浪费时间。


六、java.io.Reader 字符输入流的超类 抽象类

方法

    int read() 读一个字符

    int read(char[] chs) 读字符数组

    close() 关闭资源

常用子类

    FileReader

        构造方法 绑定数据源

            FileReader(File file)

            FileReader(String path)


七、java.io.Writer 字符输出流的超类 抽象类

方法

    write(int c) 写一个字符

    write(char[] chs) 写一个字符数组

    write(char[] chs,int start,int length) 写字符数组的一部分

    write(String str) 写字符串

    flush() 刷新

常用子类

    FileWriter

        构造方法绑定数据目的

            FileWriter(String path)

            FileWriter(File file)

            FileWriter(String path,boolean append)

            FileWriter(File file,boolean append)


八、flush和close区别:

字符输出流 需要刷新 不刷新数据不进入到数据目的

flush就是刷新数据 将数据从缓冲区中刷新到数据目的 刷新完毕后还可以继续写数据


九、IO异常处理:

将close方法放到finally中

提升作用于范围  try外定义变量 try内给变量赋值

发现close方法有异常 try catch处理

由于两个close需要分开处理 第2个close放入到finally当中

需要进行非空判断 流对象 不为null才close

public static void main(String[] args) {

    FileReader f1=null;

    FileWriter f2=null;

    try {

        f1 = new FileReader("day10\\a.txt");

        f2 = new FileWriter("day10\\b.txt");

        int len;

        char[]arr=new char[1024];

        while ((len=f1.read(arr))!=-1){

            f2.write(new String(arr,0,len));

        }

    } catch (FileNotFoundException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    }finally {

        try {

            if (f2!=null) {

                f2.close();

            }

        } catch (IOException e) {

            e.printStackTrace();

        }finally {

            try {

                if (f1!=null) {

                    f1.close();

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

        }


    }

}


十、java.util.Properties:

特点

  1.实现了Map接口 是一个双列集合 Map中的方法都可以使用

  2.没有泛型 键 是String类型  值 也是String类型

  3.唯一一个能够和IO直接结合使用的集合

方法

    setProperty(String key ,String value) 添加数据 相当于  put(K key,V value)

    getProperty(String key) 根据键找值 相当于 get(Object key)

    Set<String> stringPropertyNames() 获取所有键的set集合 相当于 keySet()


和IO流结合使用

方法

    load(InputStream in) 将文件中的键值对加载到集合中

    参数

        InputStream in:字节输入流的超类  抽象类

                        可以传入其任意子类对象 FileInputStream

    load(Reader r)将文件中的键值对加载到集合中

    参数

        Reader r:字符输入流的超类 抽象类

                可以传入其任意子类对象 FileReader

文本中的数据,必须是键值对形式,可以使用空格、等号、冒号等符号分隔。

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