Java I/O框架
Java I/O框架
什么是流
概念:内存与存储设备之间传输数据的通道
水借助管道传输; 数据借助流传输
流的分类
- 按方向(重点) 以内存为参照
- 输入流 input:将<存储设备>中的内容读入到<内存>中
- 输出流 output: 将<内存>中的内存写入到<存储设备>中
- 按单位
- 字节流: 以字节为单位,可以读写所有数据
- 字符流: 以字符为单位,只能读写文本数据
- 按功能
- 字节流/底层流: 具有实际传输数据的读写功能
- 过滤流: 在节点流的基础之上增强功能
字节流抽象类
-
字节流的父类(抽象类)
-
InputStream: 字节输入流
-
public int read(){} public int read(byte[] b){} public int read(byte[] b, int off, int len){} off是偏移量,即从数组b的第off个位置起读取 len个字节。
-
-
OutputStream: 字节输出流
-
public void write(int n){} public void write(byte[] b){} public void write(byte[] b, int off, int len){}
-
文件字节流
- FileInputStream:
- public int read(byte[] b);//从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
- FileOutputStream:
- public void write(byte[] b);//一次写多个字节,将b数组中所有字节,写入输入流
复制图片的案例
字节缓冲流
- 缓冲流:BufferedInputStream/BufferedOutputStream
- 提高IO效率,减少访问磁盘的次数
- 数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close
对象流
- 对象流:ObjectOutputStream/ObjectInputStream
- 增强了缓冲区功能
- 增强了读写8中基本数据类型和字符串功能
- 增强了读写对象的功能
- readObject() 从流中读取一个对象
- writeObject(Object obj) 向流中写入一个对象
使用流传输对象的过程成为序列化,反序列化
字符编码
- ISO-8859-1 收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号
- UTF-8 针对Unicode码表可变长度字符编码
- GB2312 简体中文
- GBK 简体中文、扩充
- BIG5 台湾,繁体中文
当编码方式和解码方式不一致时,会出现乱码
字符流
-
字符流的父类(抽象类):
- reader:字符输入流
public int read(){} public int read(char[] c){} public int read(char[] b,int off,int len){}
- write: 字符输出流
public void write(int n){} public void write(String str){} public void write(char[] c){}
文件字符流
FileReader:
public int read(char[] c)//如果流中读取多个字符,将读到内容 存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1
FileWriter:
public void write(String str)//一次写多个字符,将b数组中所有字符,写入输出流
字符流复制
字符缓冲流
- 缓冲流:BufferedReader/BufferedWriter
- 高效读写
- 支持输入换行符
- 可一次写一行,读一行
打印流
- PrintWriter:
- 封装了print() / println()方法,支持写入后换行
- 支持数据原样打印
转换流
- 桥转换流:InputStreamReader/OutputStreamWriter
- 可将字节流转换为字符流
- 可设置字符的编码方式
File类
-
概念:代表物理盘符中的一个文件或者文件夹
-
方法
-
createNewFile();//创建一个新文件 mkdir();//创建一个新目录 delete();//删除文件或空目录 exists();//判断File对象所代表的对象是否存在 getAbsolutePath();//获取文件的绝对路径 getName();//取得名字 getParent();//获取文件/目录所在的目录 isDirectory();//是否是目录 ifFile();//是否是文件 length();//获取文件的长度 listFiles();//列出目录中的所有内容 renameTo();//修改文件名为..
文件操作
文件夹操作
FileFilter接口
- public interface FileFilter
- boolean accept(File pathname)
- 当调用FIle类中的listFiles()方法时,支持传入FileFilter接口 接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在listFiles()的返回值中
案例:递归遍历删除文件和文件夹
补充:Properties
- Properties:属性集合
- 特点
- 存储属性名和属性值
- 属性名和属性值都是字符串类型
- 没有泛型
- 和流有关