1 流的概念:
l 流是有方向的,有顺序的字节概念
n I:in 输入 读
n O:out 输出 写
2 IO流的分类
a. 操作方向不同分为: 输入流与输出流
b. 操作类型不同分为: 字节流与字符流
3 字节流与字符流的比较
l 字节流可以操作所有的类型(如图片、avi、ppt、docx),而字符流只能处理字符类型
l 字节流以字节为单位(8bit),而字符流以字符为单位。(2~3个字节)
l 字节流本身是不会使用到缓冲区的,对文件直接操作;而字符流会用到缓冲区,因为字符流在操作时是放置在缓冲区中,在清空缓冲区或文件关闭时才写到文件中去的。
l 结论:推荐使用字节流
4 常用接口和类
l File(C)
l OutputStream(AC)
l InputStream(AC)
l Writer(AC)
l Reader(AC)
l RandomAccessFile(C)
结构图
5 File 文件类:操作文件或文件夹的类
1.1 属性
l 路径分隔: File.separator
1.2 方法
1.1.1 构造方法
l new File(String path)
l new File(Stint parent,String child)
l new File(File parent,String child)
1.1.2 普通方法
l mkdir(): 创建当前层文件夹,要求父类必须存在
l mkdirs(): 创建多层文件夹,父类可以不存在[有则使用,无则创建]
l exists(): 是否存在
l createNewFile():创建文件[有则使用,无则创建]
l isDirectory():是否是目录
l isFile():是否是文件
l getName():得到文件名称
l String[] list():得到文件夹中的所有内容名称
l File[] listFiles():得到文件夹中所有内容本身对象
l File []listFiles(FilenameFilter):根据文件名筛选得到文件夹中所有内容本身对象
l File []listFiles(FileFilter):根据文件名筛选得到文件夹中所有内容本身对象
注:FileNameFilter或FileFilter是遍历当前文件夹下 符合过滤条件 的内容,
如需要所有层目录过滤,还只能用listFiles(),然后根据名称做出处理。
1.1.3 获得所文件夹下的内容,使用递归算法
File f = new File("a");
privateintlevel=0;
private void recusion(File file) {
for(int i=0;i<level;i++)
System.out.print(" ");
System.out.println(file.getName());
if(file.isDirectory()){
level++;
//得到当前文件夹下 符合条件 所有内容对象
File[]fs= file.listFiles(new FileFilter() {
@Override
publicboolean accept(Filefile) {
if(file.getName().contains("c"))
returntrue;
returnfalse;
}
});
for(File f:fs){
//递归,自己调用自己
recusion(f);
}
level--;
}
}
6 字节流
1.1 输出流的基类OutputStream(AC)
1.1.1 FileOutputStream 文件输入流【无则创建,有则覆盖,除非设置追加写】
l FileOutputStream(File file)
l FileOutputStream(File file,boolean append)
l FileOutputStream(String name)
l FileOutputStream(String name,boolean append)
1.1.2 BufferedOutputStream 缓冲输出流
1.1.3 ByteArrayOutputStream 内存输出流【不重要】
1.1.4 ObjectOutputStream 对象输出流[对象流]
l 特有的方法
n writeObject(Object)
n write基本数据类型
1.1.5 DataOutputStream 数据输出流[数据流]
l 特有的方法
n write基本数据类型
1.1.6 PrintStream 打印流
l 特有的方法
n print() == write() 不换行
n println(): 识别系统,自动换行
1.2 输入流的基类InputStream(AC)
1.1.1 FileInputStream 文件输入流【无则报异常,有则读取】
l FileInputStream(File file)
l FileInputStream(String name)
1.1.2 BufferedInputStream 缓冲输入流
1.1.3 ByteArrayInputStream 内存输入流【不重要】
1.1.4 ObjectInputStream 对象输入流【对象流】
l 特有的方法
n Object readObject();
n read八种基本类型
1.1.5 DataInputStream 数据输入流[数据流]
l 特有的方法
n read八种基本类型
1.1.6 PushbackInputStream 回退流
l 特有的方法
n unread()
1.1.7 SequenceInputStream 序列输入流【合并流】
1.3 覆盖写与追加写,本质其它是看文件流的参数
l 覆盖写,覆盖文件
n new FileOutputStream(String); //覆盖文件
n new FileOutputStream(File); //覆盖文件
u write()
u write()
u write()
l 追加写,使用文件
n new FileOutputStream(String,boolean); //使用文件
n new FileOutputStream(File,boolean); //使用文件
u write()
u write()
u write()
1.4 序列化与反列化[前提:类实现Serializable接口]
1.4.1 序列化:把对象写入介质中
1.4.2 反序列化:从介质中读取对象
7 字符流
1.1 Writer 字符写入流的基类
1.1.1 FileWriter:文件字符写入流【无则创建,有则覆盖,除非设置追加写】
1.1.2 OutputStreamWriter:字节字符转换写入流,
l 作用:按指定编码写入到文件
l OutputStreamWriter(OutputStream,String)
1.1.3 BufferedWriter:缓冲字符写入流
1.1.4 CharArrayWriter:字符数组写入流【内存流】
1.1.5 StringWriter: 字符串写入流[内存流]
1.1.6 PrintWriter: 字符打印流
l 特有的方法
n print()
n println() 根据系统,自动换行
1.2 Reader 字符读取流的基类
1.1.1 FileReader:文件字符读取流【无则报异常,有则读取】
1.1.2 InputStreamReader:字节字符转换输入流
l 作用:按指定编码读取文件
l InputStreamWriter(InputStream,String)
1.1.3 BufferedReader:缓冲字符读取流
1.1.4 CharArrayReader:字符数组读取流【内存流】
1.1.5 StringReader: 字符串读取流[内存流]
1.1.6 PushbackReader:字符回退流
l 特有的方法
n unread()
1.1.7 LineNumberReader:行号读取流
l 特有的方法
n getLineNumber()
8 RandomAccessFile:随机访问文件
l 在java.io包下,它可以对文件进行处理
l 特点:
n 即可读
n 又可写
l 特有:
n 读写基数数据类型
n 按行读取
n seek(int) 设置文件指针的偏移量
n skipBytes(int) 忽略掉的字节
l 练习:文件拷贝
l 回顾:
n 可以读写基本数据类型的文件流
u RandomAccessFile
u ObjectInputStream
u ObjectOutputStream
u DataInputStream
u DataOutputStream
n 可以读写对象的文件流
u ObjectInputStream
u ObjectOutputStream
n 可以按行读取
u BufferedReader
u LineNumberReader
u RandomAccessFile
n 先进后出
u Stack
9 编码格式
l Iso-8859-1 : 西欧码 英文1个字节,中文1个字节
l Gb2312 : 简体中文 英文1个字节,中文2个字节
l Gbk : 中文 英文1个字节,中文2个字节
l Utf-8 : 全球统一编码英文1个字节,中文3个字节
l Utf-16 : 全球唯一编码 英文2个字节,中文3个字节