IO流之字符流

来源:互联网 发布:变电话号码的软件 编辑:程序博客网 时间:2024/04/30 15:45

学习导航

第二节:IO流之字节流http://blog.csdn.net/bobo8945510/article/details/52958491


IO流之基础讲解

一、什么是IO流?

这里写图片描述

二、字节流和字符流的区别?

这里写图片描述

三、IO流的分叉图!

这里写图片描述


四、字符流InputStreamReader和OutputStreamWriter!

一。InputStreamReader 是字符流Reader的子类,是字节流通向字符流的桥梁。你可以在构造器重指定编码的方式,如
果不指定的话将采用底层操作系统的默认编码方式,例如 GBK 等

1、要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
2、为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
3、BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

二。OutputStreamWriter 是字符流Writer的子类,是字符流通向字节流的桥梁。

1、每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积
2、为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:
3、BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

四—1:字符流之:使用InputStreamReader读取一个txt文档到控制台

前提你创建好了这个文档

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class TextRWByteStream04 {    /*     * 使用字符流,读取一个txt文档到控制台     * */    public static void main(String[] args) {        try {            //指定我次路径的一个txt文档            File file = new File("d://data//newhello.txt");            FileInputStream fin = new FileInputStream(file);            //我们需要把子节流转换为字符流            InputStreamReader  ird = new InputStreamReader(fin,"gbk");            //创建一个数组,注意,字符数组用的是char存放每次读取的字节            char input[] = new char[200];            //有时候当你剩余字节,不足100的时候,如果不定义偏移量,在读取文件的时候就容易多出            int num = 0;            while ((num = ird.read(input))!=-1) {                //这样就能表示,数组中有多少读取多少。而不会当【200】不满的时候用空字符代替                System.out.println(new String(input,0,num));            }            System.out.println("读取完毕");            ird.close();            fin.close();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

运行结果
这里写图片描述

四—2: 字符流之:使用字符流复制文件(InputStreamReader和InputStreamReader)

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;public class TextRWByteStream05 {    /*     * 使用字符流,读取一个txt文档到控制台并复制一份新的txt文档,     * */    public static void main(String[] args) {        try {            //创建一个字符流,指定我次路径的一个txt文档            FileInputStream fin = new FileInputStream(new File("d://data//newhello.txt"));            FileOutputStream outf= new FileOutputStream("d://data//newhello_two.txt");            //我们需要把子节流转换为字符流            InputStreamReader  ird = new InputStreamReader(fin,"GBK");           //字符流通向字节流的桥梁。            OutputStreamWriter iwd = new OutputStreamWriter(outf,"GBK");            //创建一个数组,注意,字符数组用的是char存放每次读取的字节            char input[] = new char[200];            //有时候当你剩余字节,不足100的时候,如果不定义偏移量,在读取文件的时候就容易多出            int num = 0;            while ((num = ird.read(input))!=-1) {                //这样就能表示,数组中有多少读取多少。而不会当【200】不满的时候用空字符代替                System.out.println(new String(input,0,num));                iwd.write(input,0,num);            }            System.out.println("复制完毕");            iwd.close();            outf.close();            ird.close();            fin.close();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

运行结果:

这里写图片描述

四—3: 字符流之:使用字符流复制文件带缓存(InputStreamReader和InputStreamReader)

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;public class TextRWByteStream06 {    /*     * 使用带缓冲的字符流,读取一个txt文档并复制到一个新的txt文档     * */    public static void main(String[] args) {        try {            //创建一个字符流,指定我次路径的一个txt文档            FileInputStream fin = new FileInputStream(new File("d://data//newhello.txt"));            FileOutputStream outf= new FileOutputStream("d://data//newhello_two.txt");            //InputStreamReader 是字符流Reader的子类,是字节流通向字符流的桥梁。            InputStreamReader  ird = new InputStreamReader(fin,"GBK");            //OutputStreamWriter 是字符流Writer的子类,是字符流通向字节流的桥梁。            OutputStreamWriter iwd = new OutputStreamWriter(outf,"GBK");            //用BufferedReader 和 BufferedWriter 可以提高读写的效率            //但是有一个弊端,就是写入到新txt文件的时候,他不会自动换行。所以这里大多建议使用            BufferedReader bfd = new BufferedReader(ird);            BufferedWriter bw = new BufferedWriter(iwd);            String value = "";            while ((value =bfd.readLine())!=null) {                System.out.println(value);                //添加“\r\n”才可以换行                bw.write(value);            }            System.out.println("复制完毕");            bfd.close();            bw.close();            iwd.close();            outf.close();            ird.close();            fin.close();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

结果也是复制成功,下面我没有添加“\r\n”,所以没有换行

这里写图片描述


四—4: 字符流之:打印流PrintWriter 好处,就是可以更简便的处理缓存区的内容

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;public class TextRWByteStream07 {    /*     * 使用带缓冲的字符流,读取一个txt文档并复制到一个新的txt文档     * //用BufferedReader 和 BufferedWriter 可以有效的提高读写的效率     *      * 但是BufferedWriter有一个弊端,就是写入到新txt文件的时候,他不会自动换行。!     * 所以这里大多建议这里使用打印流,所以这里大多建议这里使用打印流,PrintWriter     * */    public static void main(String[] args) {        try {            //创建一个字符流,指定我次路径的一个txt文档            FileInputStream fin = new FileInputStream(new File("d://data//newhello.txt"));            FileOutputStream outf= new FileOutputStream("d://data//newhello_two.txt");            InputStreamReader  ird = new InputStreamReader(fin,"GBK");            OutputStreamWriter iwd = new OutputStreamWriter(outf,"GBK");            BufferedReader bfd = new BufferedReader(ird);//            BufferedWriter bw = new BufferedWriter(iwd);            //这里大多建议这里使用打印流,因为他比BufferedWriter 更有用些,            //后面跟一个true表示,当缓存区没有填满数据是,不调用true,剩下的数据就会被遗漏。造成复制内容不全。            PrintWriter pw = new PrintWriter(iwd,true);            String value ;            while ((value =bfd.readLine())!=null) {                System.out.println(value);//              bw.write(value);                pw.write(value+"\r\n");            }            System.out.println("复制完毕");            pw.close();            bfd.close();//          bw.flush();//          bw.close();            iwd.close();            outf.close();            ird.close();            fin.close();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

运行结果:成功
这里写图片描述

五、FileReader与FileWriter纯文本操作,直接操作文件数据流,并包装为缓冲流进行文件拷贝

如果在进行文本操作的时候,有乱码出现。请查看自己的eclipse编码配置,或者留言给我

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;public class TextRWByteStream08 {    /*     * 如果是纯文本操作,我们一般会用到FileReader与FileWriter     * 他们的好处就是,相对于使用字节流或字符流。更简单     * */    public static void main(String[] args) {        try {         FileReader fReader = new FileReader("d://data//newhello.txt");         BufferedReader bf = new BufferedReader(fReader);         FileWriter fWriter =new FileWriter("d://data//newhello_two.txt");         BufferedWriter bw = new BufferedWriter(fWriter);         String ling ;         while ((ling = bf.readLine())!=null) {             System.out.println(ling);             bw.write(ling+"\r\n");        }         System.out.println("写入完毕");         bw.flush();         bw.close();         bf.close();         fWriter.close();         fReader.close();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

运行结果:成功
这里写图片描述

demo地址:http://download.csdn.net/detail/bobo8945510/9667082

0 0
原创粉丝点击