- 文件基础知识-文件流:文件在程序中是以流的形式来操作的
- 根据路径创建一个File对象
- 根据父目录文件+子路径创建
- 根据父目录+子路径传创建
File类图
- 1 删除文件
4.2 删除目录 : 目录可以当作一个文件
4.3 创建多级目录用mkdirs
IO流原理
输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中;
输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中;
流的分类
按操作数据单位不同分为:字节流(8 bit)对于二进制文件,字符流(按字符) 对应文本文件
按数据流的流向不同分为:输入流、输出流
按流的角色不同分为:节点流、处理流/包装流
| (抽象基类) | 字节流 | 字符流 |
|---|---|---|
| 输入流 | InputStream | Reader |
| 输出流 | OutputStream | Writer |

InputStream抽象类是所有类字节输入流的超类;

- 演示读取文件(单个字节的读取,效率比较低)
- 多个字节的读取

- 将数据写入文件中 (写入单个字节),如果文件不存在,则创建文件;
2.写入字符串(先把字符串转换成字节数组)
3.1 写入字符串时,可以定义起始位置
write(byte b[], int off, int len); off是偏移量,len是写入的个数
- 将数据写入文件时,如果希望写入文件的末尾而不是开头
可以拷贝图片,也可以拷贝音乐;


单个字符读取
多个字符读取

细节
- 如果不指定true,会默认覆盖文件的内容。
- FileWriter使用过后,一定要关闭(close)或者刷新(flush),否则数据流不能写入到文件! 原因:
源码如下:Force Step Into















BufferedReader和BufferedWriter只能操作字符,字符流只能读取文本;
不能读取二进制文件【音频,视频,文档,图片】,造成文件损坏;



字节流可以操作二进制文件,但可以操作文本文件吗?可以:不要把汉字的字节拆开就不会乱码!



使用ObjectOutputSteam序列化基本数据类型和一个Dog对象(age),并保存到data.txt文件中


使用ObjectInputStream读取data.txt并反序列化恢复文件;



InputStreamReader是Reader的子类,可以将InputStream(字节流)包装成Reader(字符流)
读取文件内容默认是按照utf-8处理,如果把文件编码改成gbk,那么读取文件时就会出现中文乱码,这时需要用到转换流

OutputStreamWriter是Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流);



当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流
打印流只有输出流,没有输入流






Properties是Hashtable的子类,配置文件的格式:
键=值
键=值
键值对不需要有空格,值不需要用引号括起来,默认是String
| load | 加载配置文件的键值对到Properties对象 |
|---|---|
| list | 将数据显示到指定设备 |
| getProperty(key) | 根据建获取值(键、值均是String类型) |
| setPropertiy(key,value) | 设置键值对到Properties对象, 没有key相当于添加 |
| store | 将Properties中的键值对存储到配置文件,在idea中,保存信息到配置文件,如果含有中文,则会将汉字存储为unicode码 |



Properties父类是Hashtable,底层是Hashtable
setProperties()底层源码是Hashtable中的put方法