1.IO流(磁盘-->内存临时存储)(内存-->磁盘永久存储)
input 输入
output 输出
流数据(字符、字节)1个字符=2个字节 1个字节=8个二进制位
字节输入流 InputStream 字节输出流 OutputStream
字符输入流 Reader 字符输出流 Writer
2.字节输出流 OutputStream
此抽象方法是表示输出字节流的所有类的超类
FileOutputStream:文件字节输出流
作用:把内存中的数据写入到硬盘的文件中
构造方法:
FileOutputStream(String name)
FileOutputStream(File file)
写入原理(内存-->硬盘)
一次写多个字节:write(byte[] b)
如果第一个字节是正数(0-127),显示的时候会查询SACII表
如果第一个字节是负数,那么第一个字节和第二个字节,两个字节组成一个中文显示,查询系统默认码表(GBK)
write(byte[] b,int off,int len)把字节数组的一部分写入问价
int off:数组的开始索引
int len:写几个字节
byte[] getBytes() 把字符串转换为字节数组: “你好”.getBytes()
utf-8码表中:1个字符等于3个字节
GBK码表中: 1个字符等于2个字节
3.数据的追加、换行
FileOutputStream(String name,boolean append)
FileOutputStream(File file,boolean append)
在文件的后面追加写数据:
boolean append:
true:追加写
false:创建新文件,覆盖原文件
写换行:写 换行符号
windows:\r\n
linux:/n
mac:/r
4.字节输入流 InputStream
read()
FileInputStream把硬盘文件中的数据 ,读取到内存中使用
(len=fis.read())!=-1
read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中
5.字符输入流Reader
FileReader:文件字符输入流
6.字符输出流Writer
FileWriter:文件字符输出流
write(String str)写入字符串
void flush()刷新该流的缓冲
把数据写入到内存缓冲区(字符转换为字节的过程)
关闭和刷新的区别:flush方法和close
-flush:刷新缓冲区,流对象可以继续使用
-close:先刷新缓冲区,然后通知系统释放资源,流对象不可以再被使用
7.在jdk1.7之前使用try catch finally处理流中的异常
try{
//可能会出现异常的代码
}catch(){
// 异常处理逻辑
}finally{
//一定会执行的代码
}
JDK7的新特性
在try的后边可以增加一个(),在括号中可以定义流对象
那么这个流对象的作用域就在try中有效
JDK9的新特性
try的前边可以定义流对象
在try后边的()中可以直接引入流对象的名称(变量名)
在try代码执行完毕之后,流对象也可以释放,不用写finally
8.Properties集合是一个唯一和IO流相结合的集合
store(),把集合中的临时数据,持久化写入到硬盘中存储
load(),把硬盘中保存的文件(键值对),读取到集合中使用
Object setPropert(String key,String value)调用Hashtable的方法put()
getPropert(String key)
Set<String> stringPropertNames()相当于Map集合中的keyset()方法
9.缓冲流
字符缓冲输入流:
BufferendRead(Read in )
Read in :可以传递FileReader
String readline()以行的方式读取文本
行的终止符:换行\n
viod newline换行
读取到null时结束
10.转换流
字符编码
字符集Charset
OutputStreamWriter是字符转换为字节的桥梁(编码)
OutputStreamWriter(OutputStream out)创建使用默认字符编码
OutputStreamWriter(OutputStream out,String charsetName)创建使用指定字符集的
String charsetName:指定的编码表
InputStreamReader是字节流通向字符流的通道(解码)
11.序列化和反序列化
ObjectOutputStream:对象的序列化流
void writeObject(Object obj)
要进行序列化和反序列化的类必须实现Serializable接口,就会给类添加一个标记
有:就可以序列化和反序列化
没有:就会抛出NotSerialzableException异常
ObjectInputStream:对象的反序列化流
构造方法:
ObjectInputStream(InputStream in)
特有的成员方法:
Object readObject()从ObjectInputStream读取对象
静态不能被序列化
transient关键字:瞬态关键字
被transient修饰的成员变量,不能被序列化
|
|