美文网首页
2016.10.12 流操作的基本规律

2016.10.12 流操作的基本规律

作者: 大虾咪 | 来源:发表于2016-10-12 10:28 被阅读11次

    import java.io.BufferedReader;

    import java.io.BufferedWriter;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.FileWriter;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.OutputStream;

    import java.io.OutputStreamWriter;

    import java.io.UnsupportedEncodingException;

    public class copyData {

    /*流操作的基本规律

    *最痛苦的就是流对象有很多,不知道该用哪一个

    *通过3个明确来完成

    *1.明确源和目的      源:输入流。InputStream  Reader

    *                目的:输出流 OutPutStream Writer

    *2.操作的数据是否是纯文本。

    *                          是:字符流

    *                        不是:字节流

    *3.当体系明确后,在明确要使用那个具体的对象

    *  通过设备来进行区分

    *    源设备:内存  , 硬盘  ,键盘

    *    目的设备:内存,硬盘,控制台

    /*需求1:

    1.将一个文件中的数据存储到另一个文件中  (复制文件)

    源:因为是源  ,所以使用读取流 。InputStream Reader

    是操作文本文件,是所以选择Reader

    接下来明确要使用该体系中的那个对象,

    明确设备:硬盘。上一个文件

    Reader体系中可以操作文件的对象是FileReader

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

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

    BufferedReader bufr = new  BufferedReader(fr);

    目的:OutputStream Writer

    是否是纯文本

    设备:硬盘  一个文件

    Writer体系中可以操作文件的对象是Filewriter

    FileWriter fw =  new FileWriter("a.txt");

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

    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 bufr = new  BufferedReader(isr);

    目的:OutputStream Wirtrer

    是否纯文本 :是  用Writer

    设备:硬盘 一个文件  使用FileWriter

    FileWriter fw = new FileWriter("");

    需要提高效率  需要

    BufferedWriter buw = new BufferedWriter(fw);

    *************************

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

    目的:OutputStream Wirtrer

    是否纯文本 :是  用Writer

    设备:硬盘 一个文件  使用FileWriter

    但是FileWriter使用的默认编码表GBK

    所以要使用转换流 OutputStreamWriter

    而该转换流对象要接收一个字节输出流,而且还可以操作的文件的字节输出流。FileOutputStream

    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"), "UTF-8");

    需要提高效率  需要

    BufferedWriter buw = new BufferedWriter(osw);

    注意:

    记住转换流什么时候使用,字符和字节之间的桥梁,通常,涉及到字符串转换时

    */

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    copyData_2();

    }

    //1.将一个文件中的数据存储到另一个文件中  (复制文件)

    static void copyData_1() {

    // TODO Auto-generated method stub

    }

    //需求2:键盘录入大的数据保存到一个文件中

    //扩展一下 想要把录入的数据按照指定的编码表(utf—8)将数据存到文件中

    static void copyData_2() {

    // TODO Auto-generated method stub

    //new InputStreamReader(System.in)将字节流转换为字符流

    //键盘的最常见写法

    BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));

    BufferedWriter buw = null;

    try {

    buw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/Users/denmeiho/Desktop/a.txt"), "UTF-8"));

    String line = null;

    try {

    while ((line = bur.readLine())!=null) {

    buw.write(line);

    buw.newLine();

    buw.flush();

    }

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    } catch (UnsupportedEncodingException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (FileNotFoundException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }finally {

    try {

    buw.close();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }

    相关文章

      网友评论

          本文标题:2016.10.12 流操作的基本规律

          本文链接:https://www.haomeiwen.com/subject/hnciyttx.html