ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-12-09_流操作规律

2021-12-09 22:32:37  阅读:248  来源: 互联网

标签:12 09 Writer BufferedReader bufw BufferedWriter 2021 Reader new


学习流操作规律

/*
1.
源:键盘录入。
目的:控制台。

2.需求:想把键盘录入的数据存储到一个文件中。
源;键盘。
目的:文件。

3.需求:想要将一个文件的数据打印在控制台上。
源:文件。
目的:控制台。

流操作的基本规律:
最痛苦的就是流对象有很多,不知道该用哪一个。

通过三个明确来完成。

1.明确源和目的。
    源:输入流。InputStream  Reader。
    目的:输出流。OutputStream  Writer。
2.操作的数据是否是纯文本。
    是:字符流。
    不是:字节流。

3.当体系明确后,再明确要使用哪个具体的对象。
    通过设备来进行区分。
    源设备:内存、硬盘、键盘。
    目的设备:内存、硬盘、控制台。

-------------------------------------------------------------

1.将一个文本文件中的数据存储到另一个文件中。
    源:因为是源,所以使用读取流。InputStream Reader
    是不是操作文本文件。
    是!这是就可以选择Reader
    这样体系就明确了。

    接下来明确要使用该体系中的哪个对象。
    明确设备:硬盘。上一个文件。
    Reader体系中可以操作文件的对象是:FileReader

    是否需要提高效率:是!加入Reader体系中缓冲区 BufferedReader。

    FileReader fr = new FileReader("a.txt");
    BufferedReader bufr = new BufferedReader(fr);


    目的:OutputStream Writer
    是否是纯文本。
    是!Writer。
    设备:硬盘。一个文件。
    Writer体系中可以操作文件的对象:FileWriter

    是否需要提高效率:是!加入Writer体系中缓冲区 BufferedWriter。

    FileWriter fw = new FileWriter("b.txt");
    BufferedWriter bufw = new BufferedWriter(fw);

-------------------------------------------------------------    

2.需求:将键盘录入的数据保存到一个文件中。
    这个需求中有源和目的都存在。
    那么分别分析。
    源:InputStream Reader
    是不是纯文本?是。Reader

    设备:键盘。对应的对象是System.in。
    不是选择Reader吗?System.in对应的不是字节流吗?
    为了操作键盘的文本数据方便,转成字符流按照字符串操作是最方便的。
    所以既然明确了Reader,那么就将System.in转成Reader。
    用了Reader体系中的转换流,InputStreamReader

    InputStreamReader isr = new InputStreamReader(System.in);

    需要提高效率吗?需要!BufferedReader
    BufferedReader bufr = new BufferedReader(isr);

    
    目的:OutputStream Writer
    是否是纯文本?是!Writer
    设备:硬盘。一个文件。使用:FileWriter。
    FileWriter fw = new FileWriter("c.txt");
    需要提高效率吗?需要。
    BufferedWriter bufw = new BufferedWriter(fw);


    *********************
    扩展一:想要把录入的数据按照指定的编码表(utf-8),将数据存到文件中。

    目的:OutputStream Writer
    是否纯文本?是!Writer
    设备:键盘。一个文件。使用FileWriter。
    但是FileWriter是使用的默认编码表。GBK

    但是存储时,需要加入指定的编码表utf-8,而指定的编码表只有转换流可以指定。
    所以要使用的对象是OutputStreamWriter。
    而该转换流对象要接收一个字节输出流。而且还可以操作文件的字节输出流,FileOutputStream

    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt", "utf-8"));

    需要高效吗?需要。
    BufferedWriter bufw = new BufferedWriter(osw);

    所以,记住,转换流什么时候使用?字符和字节之间的桥梁,通常,涉及到字符编码转换时,
    需要用到转换流。
*/
import java.io.*;

class TransStreamDemo2 {
    public static void main(String[] args) throws IOException {
        // 键盘的最常见写法。
        // BufferedReader bufr = 
            // new BufferedReader(new InputStreamReader(System.in));
        // BufferedReader bufr =
            // new BufferedReader(new InputStreamReader(new FileInputStream("CopyPic.java")));
        BufferedReader bufr =
            new BufferedReader(new InputStreamReader(System.in));

        // BufferedWriter bufw =
            // new BufferedWriter(new OutputStreamWriter(System.out));
        // BufferedWriter bufw = 
            // new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt")));
        // BufferedWriter bufw = 
            // new BufferedWriter(new OutputStreamWriter(System.out));
        // BufferedWriter bufw =
            // new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d.txt")));
        // BufferedWriter bufw =
            // new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d1.txt"), "GBK"));
        BufferedWriter bufw =
            new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d2.txt"), "UTF-8"));

        String line = null;

        while ((line = bufr.readLine()) != null) {
            if ("over".equals(line)) {
                break;
            }
            bufw.write(line.toUpperCase());
            bufw.newLine();
            bufw.flush();
        }

        bufr.close();
    }
}

 

标签:12,09,Writer,BufferedReader,bufw,BufferedWriter,2021,Reader,new
来源: https://www.cnblogs.com/pingfanliliang/p/15665399.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有