IO流
文件
- 是保存数据的地方
- 文件在程序中是以流的形式来操作的
- 流:数据在数据源(文件)和程序(内存)之间经历的路径
- 输入流:数据从数据源(文件)到程序(内存)的路径
- 输出流:数据从程序(内存)到数据源(文件)的路径
- 创建文件对象相关构造器和方法
- 相关方法:
- new File(String pathname) //根据路径构建一个File对象
- new File(File parent,String child) //根据父目录文件+子路径构建
- new File(String parent,String child) //根据父目录+子路径构建
- createNewFile 创建新文件
- 相关方法:
- 获取文件的相关信息:
- getName,getAbsolutePath,getParent,length,exists,isFile,isDirectory
- 目录的操作和文件的删除
- mkdir创建一级目录,mkdirs创建多级目录,delete删除空目录或文件
IO流原理及流的分类
-
流的分类:
-
按操作数据单位不同分为:字节流(8 bit)二进制文件,字符流(按字符) 文本文件
-
按数据流的流向不同分为:输入流,输出流
-
按流的角色的不同分为:节点流,处理流/包装流
-
字节流 字符流 输入流 InputStream Reader 输出流 OutputStream Writer
-
-
InputStream:字节输入流
- InputStream 常用的子类:
- FileInputStream:文件输入流
- BufferedInputStream:缓冲字节输入流
- ObjectInputStream:对象字节输入流
- InputStream 常用的子类:
-
FileReader 和 FileWriter 介绍
FileReader 和 FileWriter 是字符流,即按照字符来操作io
- FileReader相关方法:
- new FileReader(File/String)
- read:每次读取单个字符,返回该字符,如果到文件末尾返回-1
- read(char[]):批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1
- 相关API new String(char[]):将char[]转换成String
- new String(char[],off,len):将char[]的指定部分转换成String
- FileWriter常用方法
- new FileWriter(File/String):覆盖模式,相当于流的指针在首端
- new FileWriter(File/String,true):追加模式,相当于流的指针在尾端
- write:写入单个字符
- write(char[]):写入字符数组
- write(char[],off,lenn):写入指定数组的指定部分
- write(String):写入整个字符串
- write(String,off,len):写入字符串的指定部分
- toCharArray:将String转换成char[]
- 注意:FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件
- FileReader相关方法:
-
序列化和反序列化
- 序列化就是在保存数据时,保存数据的值和数据类型
- 反序列化就是在恢复数据时,恢复数据的值和数据类型
- 需要让某个对象支持序列化机制,则必须让其类时可序列化的该类必须实现如下两个接口之一:Serializable (一个标记接口,没有方法) 以及 Externalizable(该接口有方法需要实现,一般选前一个)
- ObjectOutputStream 提供序列化功能
- ObjectInputStream 提供 反序列化功能
-
注意事项和细节说明
- 读写顺序要一致
- 要求实现序列化或反序列化对象需要Serializable
- 序列化的类中建议添加SerivalVersionUID,为了提高版本的兼容性
- 序列化对象时,默认将里面所有属性都进行序列化,除了static或transient修饰的成员
- 序列化对象时,要求里面属性的类型也需要实现序列化接口
- 序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化
-
转换流-InputStreamReader 和 OutputStreamWriter
- InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成(转换)Reader(字符流)
- OutputStreamWriter:Writer的子类,实现将OutputStream(字节流)包装成Writer(字符流)
- 放处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流
- 可以在使用时指定编码格式(比如utf-8,gbk,等)
-
打印流-PrintStream 和PrintWriter
-
Properties类
-
专门用于读写配置文件的集合类
配置文件的格式:
键=值
-
注意:键值对不需要有空格,值不需要用引号一起来。默认类型是String
-
常见方法:
- load:加载配置文件的键值对到Properties对象
- list:将数据显示到指定设备
- getProperty(key):根据键获取值
- setProperty(key,value):设置键值对到Properties对象
- store:将Properties中的键值对存储到配置文件中,在idea中,保存信息到配置文件中,如果含有中文,会存储为unicode码
-