IO流

流的类图

分类

1.按数据流向

  • 输入流
  • 输出流
  1. 按数据类型
  • 字节流
  • 字符流

IO流常用基类

  • 字节流的抽象基类:InputStream,OutputStream
  • 字符流的抽象基类:Reader,Writer
    这四个类的子类都以他们为名字结尾
    由于他们都是抽象的类,无法实例化,因此需要寻找他们的子类

FileOutputStream 写入/输出数据字节流

构造方法

FileOutputStream(File file) 参数为File类型的对象
FileOutputStream(File file,boolean append) 参数为File类型的对象,若append为true,则在文件末尾继续写
FileOutputStream(String name) 参数为路径

写入数据

-步骤:1. 创建流对象 2. 写数据 3.释放资源
public void write(byte[] b) 将字节数组写入文件
public void write(byte[] b, int off, int len) 将字节数组的一部分写入文件,从off开始,写len个
public void write(int b) 写一个字节,根据编码表找到对应字符,如97对应a

实现换行

write("\n".getBytes()); 写入换行符 “\n” 的字节
注意:可能通过某些软件打开会发现没有换行,是因为不同操作系统的换行符不同,但高级记事本软件可以识别任意换行符

异常处理

标准写法

FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("fos2");
            fos.write("Java".getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

FileInputStream 字节流读入数据

构造方法

FileInputStream(File file) 参数为File类型的对象
FileInputStream(String name) 参数为路径

读入数据

public int read() 从该输入流读取一个字节的数据,如果返回是-1,则读完了
public int read(byte[] b) 一次读一个字节数组的数据,返回读到的字节个数

计算机如何识别中文?

在计算机中,中文占两个字节,第一个字节一定是负数

自带数组的IO流

BufferedOutputStream 自带缓冲区的流,BufferedInputStream 自带缓冲区的流

构造函数

public BufferedInputStream(InputStream in) 创造默认大小的流
public BufferedInputStream(InputStream in,int size) 创建指定大小的流
public BufferedOutputStream(OutputStream out) 创造默认大小的流
public BufferedOutputStream(OutputStream out,int size) 创建指定大小的流
为什么要传递一个流对象,而不传递一个具体的文件或文件路径呢?
此流仅仅提供缓冲区,真正读写还需要基本的流对象实现

OutputStreamWriter 写入/输出数据字符流,从字节流到字符流的桥

构造函数

public OutputStreamWriter (OutputStream out) 参数为OutputStream 对象,可以用子类对象入FileOutputStream
public OutputStreamWriter (OutputStream out,String charsetName) charsetName 为编码名称

方法

public void write(int c) 写一个字符
public void write(char[] cbuf) 写一个字符数组
public void write(char[] cbuf,int odd,int len) 写一个字符数组的一部分
public void write(String str ) 写一个字符串
public void write(String str,int odd,int len) 写一个字符串的一部分
public void flush() 刷新

InputStreamReader 读取数据字符流,从字节流到字符流的桥

构造函数

public InputStreamReader (InputStream in) 参数为InputStream 对象,可以用子类对象入FileInputStream
public InputStreamReader (InputStream in,String charsetName) charsetName 为编码名称

方法

public int read(int c) 读一个字符,没读到返回-1
public int read(char[] chs) 读一个字符数组,结果在chs数组中,返回读到的长度,没读到返回-1

FileWriter 和FileReader

在使用本地默认编码表时,使用这两个字符流的类
FileWriter 继承 OutputStreamWriter ,FileReader 继承 InputStreamReader ,使用方法如上

字符缓冲流BufferedWriter和BufferedReader

特殊功能

BufferedWriter : public void newLine() 产生一个新的行
BufferedReader : public String readLine() 一次读取一行,将读到的内容以String 返回,若没有读到,返回null

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

推荐阅读更多精彩内容

  • 1、IO流 1.1、概述 之前学习的File类它只能操作文件或文件夹,并不能去操作文件中的数据。真正保存数据的是文...
    Villain丶Cc阅读 2,668评论 0 5
  • IO简单概述 IO解决问题 : 解决设备与设备之间的数据传输问题(硬盘 -> 内存 内存 -> 硬盘) 读和写文...
    奋斗的老王阅读 3,437评论 0 53
  • # 3.1 File # ## 3.1.1 File基本概念 ## 1.基本概念 -File类用于表示文件(目录)...
    闫子扬阅读 462评论 0 0
  • 标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好...
    navy_legend阅读 713评论 0 0
  • Java中是通过流的方式对数据进行操作,用于操作流的类都在IO包中,IO流用来处理设备之间的数据传输。IO流按照流...
    阿Q说代码阅读 1,560评论 0 1