java学习之IO框架

IO框架

内存与存储设备之间传输数据的通道

流的分类

按方向:输入流(将<存储设备>中的内容读入到<内存>中),输出流与输入流相反

按单位:字节流:以字节为单位,可以读取所有数据;字符流:以字符为单位,只能读写文本数据。

按功能:节点流:具有实际传输数据的读写功能,过滤流:在节点流的基础之上的增强流。

字节流

InputStream:字节输入流,read(),read(byte[ ] b ), read(byte[ ] b,int off ,int len

OutputStream:字节输出流,write(),write(byte[ ] b),write(byte[ ] b,int off ,int len)

字节节点流

FileOutputStream:public void write(byte[ ] b) // 一次写多个字节,将B数组中所有字节,写入输出流。

FileInputStream:public void read(byte [ ] b) //从流中读取多个字节,将读到的内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1;

字节过滤流

缓冲流:BufferedOutputStream/BufferedOnputStream

提高IO效率,减少访问磁盘的次数;将数据存储在缓冲区,flush是将缓存区的内容写入到文件中,也可以直接close。

对象流:ObjectOutputStream/ ObjectInputStream

增强了缓冲区功能,增强了读写8种基本数据类型和字符串功能。增强了读写对象的功能:readObject()从流中读取一个对象,writeObject(Object obj)向流中写入一个对象。

!!使用流传输对象的过程称为序列化,反序列化。

对象序列化的细节:必须实现Serializable接口,必须保证其所有属性均可序列化transient修饰为临时属性,不参与序列化,读取到文件尾部的标志:java.io.EOFException.

字符编码

一般使用UTF-8字符编码的方式,其针对Unicode的可变长度字符编码

ISO-8859-1 收录除ASCII外,还包括了西欧,希腊语,泰语,阿拉伯语,希腊语来对应的文字符号

GB2312简体中文,GBK简体中文、扩充

BIG5台湾,繁体中文

!!!!!编码方式和解码方式不一致时,就会出现乱码的情况

字符流

字符流的父类

Reader:字符输入流:read(),read(char[ ] c),read(char [ ] a,int off, int len)

Writer:字符输出流:write(),write(char[ ] c),write(char [ ] a,int off, int len),

字符节点流

FileWriter:public void write(byte[ ] b) // 一次写多个字节,将B数组中所有字节,写入输出流。

FileReder:public void read(byte [ ] b) //从流中读取多个字节,将读到的内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1;

字符过滤流

缓冲流:BufferedWriter/BufferedReader

支持输入换行,可一次写一行,读一行

PrintWriter:

封装了print()/println()方法,支持写入后换行,支持数据原样打印

字符节点流

桥转换流:InputStreamRead/OutputStreamWriter

可将字节流转换为字符流,可设置字符的编码方式

使用步骤:创建节点流,创建过滤流,设置字符编码集,封装过滤流,读写数据,关闭流

File类

遍历文件夹

使用foreach遍历即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值