黑马程序员技术交流社区
标题:
【石家庄校区】JavaEE个人学习总结day10-io
[打印本页]
作者:
sun2ice
时间:
2018-1-4 17:05
标题:
【石家庄校区】JavaEE个人学习总结day10-io
本帖最后由 sun2ice 于 2018-1-4 17:32 编辑
# day 10
##System的类字段
*
类字段
* 静态的成员变量
*
err 标准的错误输出流
*
`PrintStream OutPutStream的子类`
*
in 标准的输入流
* InPutStream 类
*
out 标准的输出流
*
`PrintStream OutPutStream的子类`
*
String--->byte[];
* getBytes();
*
byte[]--->String
* String (byte{} b)
##转换流
*
转换流:把字节流转成字符流:
```
InputStreamReader:把字节输入流转成字符输入流.
//创建输入流对象
Reader r = new InputStreamReader(System.in);
分析上面
InputStream is = System.in;
Reader r = new InputStreamReader(is);
//创建输出流对象
FileWriter fw = new FileWriter("a.txt");
```
```
//创建输入流对象
BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java"));
//创建输出流对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
分析上面
//OutputStream os = System.out;
//Writer w = new OutputStreamWriter(System.out);//多态,父类型引用指向子类对象
//BufferedWriter bw = new BufferedWriter(w);
```
*
为什么有字节转字符流,没有字符转字节流.
```
字节流可以操作一切文件(纯文本文件/二进制文件).
字符流是用来操作中文纯文本使用的,本身是对字节流的增强.
```
##打印流
PrintStream 字节打印流(暂时不写)
PrintWriter 字符打印流
*
只有输出流
可以自动换行 println()
不能输出byte字节
可以配置自动刷新(调用println print printf)
也是包装流没有写出功能
可以把字节输出流转换为字符输出流
关流不会抛异常
*
打印流
*
构造方法
*
`PrintWriter(String filepath)`
*
`PrintWriter(Writer out, boolean autoFlush)`
: 创建对象, 同时设置是否自动刷新
*
`PrintWriter(OutputStream out, boolean autoFlush)`
: 创建对象, 同时设置是否自动刷新
*
成员方法
*
`void write(String s)`
: 写一个字符串
*
`void print(String s)`
: 输出字符串, 没有换行
*
`void println(String s)`
: 输出字符串并换行. 如果启动了自动刷新, 则会执行自动刷新写入数据
*
`void printf(Locale l, String format, Object... args)`
: 使用指定格式字符串和参数将格式化的字符串写入输出流. 如果启动了自动刷新, 则会执行自动刷新写入数据
*
`void format(Locale l, String format, Object... args)`
: 使用指定格式字符串和参数将格式化的字符串写入输出流. 如果启动了自动刷新, 则会执行自动刷新写入数据
```
##对象操作流程
可以用于操作任意类型的对象
*
`ObjectInputStream`
: 对象输入流 只能将支持 java.io.Serializable 接口的对象写入流中
* 构造方法:
* `ObjectInputStream(InputStream in)`: 创建对象输入流
* 成员方法
* `Object readObject()`: 从对象输入流读取对象, 一次只读取一个对象. 当读不到时抛出`EOFException`
*
`ObjectOutputStream`
: 对象输出流
* 构造方法:
* `ObjectOutputStream(OutputStream out)`: 创建对象输出流
* 成员方法
* `void writeObject(Object o)`: 将对象写入对象输出流
```
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt"));
```
使用对象输出流写出对象,只能使用对象输入流来读取对象
只能将支持 java.io.Serializable 接口的对象写入流中
##Properties集合
*
Properties概述(键=值,注释用#)
* 每个键和其对应的值都是一个字符串
* 空参构造
*
Properties: [p'rɒpətɪz], 配置文件集合类, 可与IO结合使用
*
构造方法
*
`Properties Properties()`
*
成员方法
* 可以使用Map的方法
*
`String getProperty(String key)`
: 根据键获取值. 如果找不到该键, 则返回null
*
`String getProperty(String key, String defaultValue)`
: 根据键获取值, 如果值不存在, 则使用指定的默认值
*
`void setProperty(String key, String value)`
: 设置键值对
*
`void load(InputStream in)`
: 从字节输入流中读取Properties
*
`void load(Reader reader)`
: 从字符输入流中读取Properties
*
`void list(PrintStream out)`
: 将Properties输出到指定的字节打印输出流. 会自动加一个
`-- listing properties --`
文件头
*
`void list(PrintWriter out)`
: 将Properties输出到指定的字符打印输出流. 会自动加一个
`-- listing properties --`
文件头
*
`void store(Writer writer, String comments)`
: 将Properties输出到指定的输出流, 并添加一个注释. 如果不想要注释可传null. 无论有没有注释, 都会添加时间字符串的注释
*
`void store(OutputStream os, String comments)`
: 同上, 只是流不同
##编码表
*
把计算机底层的二进制数字转成字符
*
常见编码表
```
IO流的总结和梳理:
文件流:
FileInputStream
FileOutputStream
FileReader
FileWriter
缓冲流:
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
转换流(把字节转换为字符):
InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
FileWriter fw =new FileWriter("a.txt");
OutputStreamWriter
BufferedReader br= new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
对象流(序列化和反序列化):
ObjectInputStream
ObjectOutputStream
打印流:
PrintStream
PrintWriter
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2