黑马程序员技术交流社区
标题:
IO流
[打印本页]
作者:
薛灵云
时间:
2015-8-27 10:11
标题:
IO流
1. 回顾
操作文本文件的字符流
基本流:
FileReader
FileWriter
使用读一个字符数组,写一个字符数组的一部分。
高效流:
BufferedReader
BufferedWriter
使用读一个字符数组,写一个字符数组的一部分。
特有:
读一行 写一行
readLine() -- 读一行但是不包括换行符
write(String line)
newLine()
操作二进制流数据的字节流
基本流:
FileInputStream
FileOutputStream
使用一次读一个字节数组,写一个字节数组的一部分
高效流:
BufferedInputStream
BufferedOutputStream
使用一次读一个字节数组,写一个字节数组的一部分
2.
System.in -- BufferedInputStream -- InputStream
System.out -- PrintStream -- OutputStream
3. 转换流
1) 字节流到字符流的桥梁:InputStreamReader
案例:键盘录入数据写入文件。
数据从字节流(System.in)流向字符流(BufferedReader),所以是字节到字符的桥梁:InputStreamReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 装饰模式
2) 字符流到字节流的桥梁:OutputStreamWriter
案例: 读取文本文件数据输出到控制台。
数据从字符流(BufferedWriter)流向字节流(System.out),所以是字符流到字节流的桥梁:OutputStreamWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))
注意事项:
1) 谁到谁的桥梁,要按照数据的流向区分。但实际操作都是把字节流封装成字符流
2) 转换流是字符流,那么它就只能操作文本文件。
3) 转换流可以自己指定文件的编码
在构造方法的第二个参数,指定。
4. 打印流:
PrintStream
PrintWriter -- Wrtier
注意:打印流只有输出流
1) 可以操作任意数据
2) PrintWriter 自动刷新功能,必须启动,并且使用的是println printf format三个方法
启动自动刷新 -- 构造方法:
PrintWriter(Writer out, boolean autoFlush)
PrintWriter(OutputStream out, boolean autoFlush)
3) PrintWriter可以直接写入文件
5.
ObjectInputStream
-- 反序列化
readObject()
ObjectOutputStream
-- 序列化
writeObject()
1) 对象能被序列化,需要实现接口 Serializable
2) 实现接口 Serializable 后,请添加序列化ID
6. 编码表
目前: GBK
开发中:一般都会采用UTF-8,因为它支持多国语言。
开发中,解决乱码问题:统一编码。
7. Properties
作为集合体系,是Hashtable的子类,键和值都是字符串。
特有功能:
添加:
Object setProperty(String key, String value)
获取:
String getProperty(String key)
String getProperty(String key, String defaultValue)
Set<String> stringPropertyNames()
System.getProperties() -- 获取系统属性(调试可能会用到)
作为与IO结合的集合类:
list() -- 将集合中的数据写入流中
load(InputStream is)
load(Reader r)
-- 将流中的数据加载到集合中
store() -- 将集合中的数据保存到流中(文件中)
.properties 文件 -- 配置文件
注释文字用 # 开头
需求: 我有一个学生类,这个类包含以下成员变量:姓名,语文成绩,数学成绩,英语成绩。
请从键盘录入5个学生信息,然后按照自己定义的格式存储到文本文件中。
要求被存储的学生按照分数从高到低排序
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2