黑马程序员——流对象的选择使用

来源:互联网 发布:office 破解版 知乎 编辑:程序博客网 时间:2024/05/16 11:00

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

                      java学记笔记之流对象的选择与使用方法

由于流对象有很多个,writer,reader,InputStream,OutputStream,应用时不知道具体该用哪一个,给我们带来困惑。

      其实流对象的选择十分简单只要明确一下三点即可:

1、明确源和目的

    源:输入流  可选InputStream、reader 体系

    目的:输出路 可选 OutputStream、writer 体系

2、操作的数据是否是纯文本

    是:使用字符流

    否:使用字节流

3、当体系明确后,再明确要具体使用那个具体的对象

    通过设备来进行区分:

    源:内存,硬盘,键盘

    目的:内存,硬盘,控制台


例一、将个文本数据存储到另一个文件中,复制文件

分析:源:纯文本文件  InputStream,Reader可选,因为是源所以使用读取流是不是操作文本文件,是!选Reader

体系就明确了。

接下来要使用该体系中的哪个对象?

明确设备:硬盘。Reader体系中的可以操作文件的FileReader


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

文件是否较大需要使用缓冲区提高效率?是!

BufferedReader bufr = new BufferedReader(fr);


目的:OutputStream Writer

是否纯文本?是!Writer  设备:硬盘

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


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

文件是否较大需要提高效率?是!

BufferedWriter bufw = new BufferedWriter(fw);

具体代码如下:


public class Copy_file(){

     public static void main(String[] args) throws IOException

{

     FileReader fr = null;

     FileWriter fw = null;    

     fr = new FileReader("a.txt");//初始化流对象

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

     int ch = 0;

     while((ch=fr.read())!=-1)

{

      fw.write(ch); 

}

if(fr!=null) fr.close();

if(fw!=null)fw.close();//关闭资源

}

}//这段代码没加缓冲区,大家自己试试加上缓冲区


例二、将一个图片文件数据存储到另一个文件中,文件复制

分析:

1、源:图片文件 InputStream Reader 操作的是图片文件

选 InputStream 体系明确

接下来明确体系中的那个对象:

设备:硬盘,图片文件 

选用InputStream中可以操作文件FileInputStream

FileInputStream fis = new FileInputStream(“a.jpg”);

目的:OutputStream Writer

是否存在文本 否!OutputStream  设备:硬盘,一个图片

OutputStream中的 FileOutputStream


FileOutputStream fos = new FileOutputStream("b.txt");

代码如下

public class Pic_copy

{

         public static void main(String[] args) throws IOException

{

        FileInputStream fis = null;

        FileOutputStream fos = null;

        fis = new FileInputStream("a.jpg");

        fos = new FileOutputStream("b.jpg");

        byte[] buf = new byte[1024];

        int len = 0;

       

         while((len = fis.read(buf))!=-1){

               fos.write(buf,0,len);

}

 if(fis!=null) fis.close();

if(fos!=null)fos.close();

}

}

另外涉及到键盘输入时要用到转换流InputStreamReader

InputStream  in = System.in;

InputStreamReader isr = new InputStreamReader(isr);

BufferedReader br = new BufferedReader(isr);

键盘录入的简写:BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


另涉及到想要将录入数据按照指定的编码表(utf-8),将数据存储到文件中。或则将指定编码表中的文件读出来。

因FileWriter 用的是默认码表 FileInputStream用到的也是默认码表

只有OutputStreamWriter转换流才可以指定编码表

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

InputStreamReader isr = new InputSteamReader((new FileReader("a.txt")),"UTF-8");

以上是我学些流操作的心得,如有不周,万望指正


0 0
原创粉丝点击