黑马程序员技术交流社区

标题: 【石家庄校区】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