文章目录
1. File类
创建File对象
- 注意:
- File是一个代表文件或目录(文件夹)的类
- 创建File类,并不是真的创建
- java并不会对该路径名去检测,仅仅只是根据这个文件名创建一个对象
- 构造方法创建对象:只是对文件的一种描述,并不会去做检测,创建真正的文件
- 方式一:
- 方式二:
- 方式三:
- 方式一:
创建真实文件
- 示例
解释:异常分为编译时异常和运行时异常,运行时异常可以不必在代码中声明,由JVM自动检测。但编译时异常必须声明,以便使得JVM机知道可能会发生这个异常,如果在运行过程中发生了这种异常,JVM机要进行捕获处理。JVM机难道不能自动检测编译时异常,省得我们去声明。但这样岂不是增加了JVM负担。
声明之后,如果创建失败,JVM自动捕获异常。而其他编译时异常,没有用到相应的类,没有声明,JVM也就不会去管。 - 注意:
- 这个方法在执行时候,会依赖于构造方法创建的对象的描述信息,去进行检测。
- 如果该方法创建成功之后,会返回true。如果文件已存在,返回false,不会重复创建
- 该方法创建不了目录(文件夹),如下图。
创建目录
- 创建单级目录(仅仅只能是单级)
- 创建单级目录和多级目录
- 删除目录和文件
注意:这个删除是彻底删除。必须精确指明要删的目录,如果目录下有任何东西,都会删除失败。
遍历目录
删除指定目录的所有文件
- 注意:delete()方法并不能删除含有子目录或文件的指定目录。那么如果,想要删除D盘下的所有文件,必须一一指定删除,这样做显然很费劲。以下代码用递归的方式对指定目录进行了全部删除,删除后不可还原,慎用!!!:
计算指定文件夹下的指定后缀名文件的个数
文件过滤器的使用
File类的API方法
2. IO流
IO流的定义
- 以内存为参照物
IO流的分类
- 按传输方向分为:输入流,输出流
- 按照传输形式:字节流,字符流
- IO四大基本流
字符流 | 字节流 | |
---|---|---|
输入流 | Reader | InputStream |
输出流 | Writer | OutputStream |
注意:这对应的四个类全是抽象类,为什么是抽象类?因为还有一个条件没有确定,该条件没有确定,该条件就是应用场景。也就是数据获取的位置(硬盘,内存,网络),不同的场景,所对应的获取方式不同,而这四大基本流只是对不同的方式的共性的抽象。
3. 字符流
FileWriter类的使用
- 确定场景:硬盘的一个txt文件,所以使用FileWriter类
- 创建对象,创建通道
注:File文件类是IO流的前提,比如FileWriter()中的参数需要是文件。
- 写数据
- 如何解决以下问题
- fw就是两者之间的通道,传输的数据的过程中还用到了缓冲区,缓冲区好比是运输货物的船,等船装满了,再运输到对岸。
- 如何解决以下问题
- 所以引发了一个问题,如果数据没有装满就会滞留在缓冲区
该图执行之后,文件中并没有写入。原因是缓冲区没装满 - 缓冲区清空的两种方式,close将通道关掉,也就是那个fw引用
写法规范
FileReader
- 这里不会去检测,创建文件,如果没有该文件,就会报错
快速入门
遍历文件:
注意:一个一个的读,和FileWriter一对比,就知道,FileReader没有缓冲区。但缓冲区很方便,一次性能读写很多数据,所以我们要自己建一个缓冲区,该缓冲区用数组来做。
注意:数组的大小很影响文件的读速度,但并不是缓冲区越大越好,因为数组的创建和销毁也是需要时间的,读的时间和这部分时间要到最低才可以
4. 字节流
FileOutputStream
- 往一个txt文件中写入数据(以字节传输)——字节输出流,文件FileOutputStream
在txt文件中,当你以字节进行传输时,txt文件会把字节转换成字符的形式
快速入门
- 如果先运行一遍以上程序,再运行一遍,那么后者会将前者覆盖
- 大部分字节流没有缓冲区
追加操作
- 只需要在构造参数中,多加一个参数即可
- 字符输出流也是同理
FileInputStream
复制操作
注意:无论是文件字节流还是文件字符流,只要是输出流(FileWriter,FileOutputStream),即使没有文件存在,也会检测创建文件。但是输入流(FileReader,FileInputStream)不会,如果文件不存在会报异常
,
5. 缓冲流
- 我们发现FileWriter底层自带缓冲区,而FileReader没有缓存区,每次都需要我们用一个数组来自建一个缓冲区。而字节流也一般都没有缓冲区,无论是读还是写,都需要自建数组缓冲区。效率很慢,因此,java中就出现了缓冲流这一概念。
- 字符流和字节流都有其对应的缓冲区
BufferedReader
- 注意:BufferedReader是读完之后,再读就返回空
- 缓冲流这里使用了装饰者模式
- 缓冲流还有:BufferedOutputStream,BufferedInputStream,BufferedReader,BufferedWriter(虽然自带缓冲区,但提供一个更大的缓冲区)
6. 转换流
OutputStreamWriter
- 将字符转换成字节,因为输出是将程序中的字符串输出,所以往外输出只能是字符流转换字节流
InputStreamReader
- 将字节流转换成字符流,因为输入底层一定是字节流,所以读入时只能是字节转换字符流
7. 系统流
- System.out:字节输出流
- System.err:字节输出流
- System.in:字节输入流
- 系统流都是静态的,全局唯一,用的是同一个,所以不能关