IO流:文件和字节流

任务

1.File类的使用
	1.1 File类的作用
	1.2 File类的构造方法
	1.3 File类文件属性方法
	1.4 File类的使用练习
2.IO流
	2.1 什么是IO流
	2.2 流的作用和原理
	2.3 IO流的分类
	2.4 字节输入流
	2.5 字节输出流
	2.6 字符输入流
	2.7 字符输出流

目标

1.了解File类的作用
2.掌握File类的构造方法和常用成员方法
3.掌握流的作用和原理
4.了解流的分类
5.掌握字符流和字节流的使用

第一节 File类

1.1 File类作用
在java程序中,对磁盘文件进行描述的类。文件和目录路径名的抽象表示形式。
1.2 File类的常用构造方法
方法名描述
File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
1.3 File类文件属性方法

属性:

static String pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串(;)。
static char pathSeparatorChar:;
static String Separator:与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串(\)。
static char SeparatorChar:\
 

方法:

返回值方法名/描述
booleancanExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
booleancanRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
booleancanWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
intcompareTo(File) 按字母顺序比较两个抽象路径名。
booleanexists() 测试此抽象路径名表示的文件或目录是否存在。
booleancreateNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建个新的空文件。
booleandelete() 删除此抽象路径名表示的文件或目录。
FilegetAbsoluteFile() 返回此抽象路径名的绝对路径名形式。
StringgetAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
FilegetCanonicalFile() 返回此抽象路径名的规范形式。
StringgetCanonicalPath() 返回此抽象路径名的规范路径名字符串。
StringgetName() 返回由此抽象路径名表示的文件或目录的名称。
StringgetParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
FilegetParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录则返回 null。
StringgetPath() 将此抽象路径名转换为一个路径名字符串。
booleanisDirectory() 测试此抽象路径名表示的文件是否是一个目录。
booleanisFile() 测试此抽象路径名表示的文件是否是一个标准文件。
booleanisHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
String[]list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
booleanmkdir() 创建此抽象路径名指定的目录。
booleanmkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
booleanrenameTo(File dest) 重新命名此抽象路径名表示的文件。
File[]listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

代码实现一:

 

代码实现二:

 

代码实现三:

 

代码实现四:

 
 
1.4 File类的使用练习

代码实现:

 

第二节 IO流

2.1 什么是IO流
在工作中,经常回去操作磁盘上的资源,这个过程中实现了数据的输入和输出操作,磁盘上的文件和内存之间进行交互,数据的交互需要有一个媒介或者管道,把这个媒介或者管道就称为IO流,也被称为输入输出流【I:Input  O:Output】
2.2 流的作用和原理
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
2.3 IO流的种类

2.3.1 按照流的流向分:输入流、输出流

输入流:表示将数据读取到java程序(内存)中使用的流。

输出流:表示从java程序(内存)向外传输使用使用的流。

2.3.2 按照数据单位分:字符流、字节流

字节流:一次性传输一个字节数据,将数据以字节的形式传输。

字符流:一次性传输一个字符数据,将数据以字符的形式传输。

2.3.3 按照层次分:节点流、处理流

节点流:可以从或向一个特定的地方(节点)读写数据。

处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。
2.4 字节输入流

2.4.1 InputStream类的常用方法

InputStream是一个抽象类,不能实例化对象。
方法名描述
void close()关闭此输入流并释放与该流关联的所有系统资源。
int read()从输入流中读取数据的下一个字节。
int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。
int read(byte[] b,int off, int len)将输入流中最多len个数据字节读入 byte 数组。

2.4.2 文件输入流FileInputStream

 
2.5 字节输出流

2.5.1 OutputStream类的常用方法

OutputStream是抽象类,不能实例化对象。
方法名描述
void close()关闭此输出流并释放与此流有关的所有系统资源。
void flush()刷新此输出流并强制写出所有缓冲的输出字节。
void write(byte[] b)将 b.length 个字节从指定的 byte 数组写入此输出流。
void write(byte[] b,int off, int len)将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
void write(int b)将指定的字节写入此输出流。

2.5.2 文件输出流FileOutputStream

 
2.6 字符输入流

Reader类

Reader:是所有字符输入流的父类,为一个抽象类,不能实例化对象,使用它的子类FileReader类
 
2.7 字符输出流

Writer类

Writer:是所有字符输出流的父类,为一个抽象类,不能实例化对象,使用它的子类FileWriter类
 

总结

课前默写

1.自定义一个类Person,将多个Person对象添加到TreeSet中,并按照年龄进行降序排序
2.向一个HashMap集合中添加几对键值对,使用增强for循环将key和value遍历出来
3.简述HashMap和HashSet之间的区别

作业

1.总结集合中的内容,完善笔记
2.创建HashMap对象,向集合中加入5个键值对,采用课上的三种方式遍历集合,打印出所有的键值对
3.创建TreeMap对象,key值采用Student自定义类型,value值为String类型,表示学生的喜好,要求按照年龄升序排序,如果年龄相同,则按照成绩降序排序
4.在控制台输入一句英语, 获得每个字母出现的次数,注:每个字符作为key,出现的次数作为value
7.列出指定目录下所有扩展名为.txt的文件
8.递归删除文件,如果文件不存在,则抛出一个文件不存在的自定义异常
9.利用流实现文件内容的拷贝

面试题

1.什么是IO流,有什么作用
2.IO流都有哪些分类?依据是什么?