首页 > 代码库 > IO流操作规律

IO流操作规律

流的操作规律:
1.明确源和目的
    源:InputSream Reader
    目的:OutputStream Writer
2.明确数据是否是纯文本数据
    源:是纯文本 Reader
        否:InputSream
    目的:是纯文本 Writer
          否:OutputStream
3.明确具体的设备
源设备:
    硬盘:File
    键盘:System.in
    内存:数组
    网络:Socket流
目的设备:
    硬盘:File
    控制台:System.in
    内存:数组
    网络:Socket流
4.是否需要其他额外功能
    i.是否需要高效(缓冲区)
        是,加Buffer
    ii.转换
    

demo1:复制一个文本文件:
1、明确和目的:
    源:InputStream Reader
    目的:OutputStream Writer
2、是否纯文本
    是
    源:Reader
    目的:Writer
3、明确具体设备。
    源:
        硬盘:File
    目的:
        硬盘:File
    FileReader fr = new FileReader("a.txt");
    FileWriter fw = new FileWriter("b.txt");

4、需要额外功能吗?
    需要,需要高效
    BufferedReader bufr = new BufferedReader(new FileReader("a.txt")));
    BufferedWrieter bufw = new BufferedWrieter(new FileWriter("b.txt"));
    
demo2:读取键盘录入信息,并写入到一个文件中
1、明确和目的:
2、是否纯文本
    是
    源:Reader
    目的:Writer
3、明确设备
    源:
        键盘:System.in
    目的:
        硬盘:File
    InputStream in = System.in;
    FileWriter fw = new FileWriter("b.txt");
4、需要额外功能吗?
    需要。转换。
    将字节流转换成字符流。因为明确的源是Reader,这样操作文本数据更便捷
    InputStreamReader isr = new InputStreamReader(System.in);
    FileWriter fw = new FileWriter("b.txt");
    还需要功能吗?
    需要:嗯
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    BufferedWrieter bufw = new BufferedWrieter(new FileWriter("b.txt"));

demo3:讲一个文本文件数据显示在控制台上
1、明确和目的:
    源:InputStream Reader
    目的:OutputStream Writer
2、是否纯文本
    是
    源:Reader
    目的:Writer
3、明确具体设备。
    源:
        硬盘:File
    目的:
        控制台:System.out
    FileReader fr = new FileReader("a.txt");
    OutputStream os = System.out;
4、需要额外功能吗?
    需要,转换
    FileReader fr = new FileReader("a.txt");
    OutputStreamWriter osw = new OutputStreamWriter(System.out);
    需要高效
    
    BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
    BufferedWrieter bufw = new BufferedWrieter(new OutputStreamWriter(System.out));
    
demo4:读取键盘录入数据,显示在控制台上
    InputStream is = System.in;
    OutputStream out = System.out;
    
    InputStreamReader isr = new InputstreamReader(System.in);
    OutputStreamWriter osw new OutputStreamWriter(System.out);
    
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bufw = new BufferedWrieter(new OutputStreamWriter(System.out));

demo5:讲一个中文字符串数据按照指定的编码表写入到一个文本文件中
1、目的。OutputStream Writer
2、是纯文本,Writer
3、设备:硬盘File
FileWriter fw = new FileWriter("a.txt");
fw.write("你好");
注意:
既然需求中已经明确了指定编码表的动作,那就不可以使用FileWriter,因为FileWriter内部使用默认的本地编码表
只能使用其父类。OutputStreamWriter.
OutputStreamWriter接受一个字节输出流对象,既然是操作文件,那么该对象应该是FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName);

什么时候使用转换流呢?
1、源或者目的对应的设备室字节流,但是操作的却是文本数据,可以使用转换作为桥梁,提高对文本操作的便捷。
2、一旦操作文本涉及到具体的自定编码表时,必须使用转换流
   

IO流操作规律