IO流3操作规律

来源:互联网 发布:数据之巅 百度云 编辑:程序博客网 时间:2024/06/04 18:50

IO3操作规律

流的操作规律。

 

因为io包中的对象很多,最重要的是要知道完成数据处理是,要使用哪个对象最合适。

 

如何判断要使用哪些对象呢?

 

通过几个明确来判断对象的使用。

1,明确数据源,和 数据目的(数据汇)

数据源:InputStream   Reader

数据目的:OutputStream  Writer

2,明确数据的内容是否是纯文本。只要是纯文本数据,就使用字符流。

数据源: 是: Reader

数据目的:是:Writer

如果不是,就使用InputStream或者OutputStream

 

如果数据不能明确,只有使用字节流。

这样就可以将四个基类,进行确定,要使用哪一个。

3,明确具体设备。

数据源:键盘(System.in) ,内存(数组), 硬盘(File开头的流对象)

数据目的: 控制台(System.out),内存(数组),硬盘(File开头的流对象)

4,明确是否需要提高效率?

是:使用带Buffer对象。

 

5,是否需要一些特殊场景的操作,来完成数据的特殊处理。

需求1:复制一个文本文件。

1

数据源:InputStrea,Reader

数据目的:OutputStream ,Writer

2

是否是纯文本。

是。

数据源:Reader

数据目的:Writer

3

明确设备:

数据源:是一个文件,硬盘设备。 FileReader

数据目的:是一个文件。硬盘设备。 FileWriter.

 

代码就已经出来了。

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

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

 

4

需要高效吗?

需要。

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

BufferedReader bufr  = new BufferedReader(fr);

 

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

BufferedWriter bufw = new BufferedWriter(fw);

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

 

需求2:将键盘录入的数据存储到一个文件中。

1,

数据源:InputStrea,Reader

数据目的:OutputStream ,Writer

2,

是否是纯文本?

是。

数据源:Reader

数据目的:Writer.

3,

设备:

数据源:System.in;为了方便于操作数据源的字节数据,对其进行转换。使用转换流。

数据目的:硬盘文件。FileWriter.

 

发现一个问题,就是数据源是一个字节流。

因为纯文本使用字符流操作最方便,

所以,将数据源设备对应的字节流转成字符流。

InputStreamReader isr = new InputStreamReader(System.in);

 

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

4

需要高效吗?需要。

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

 

BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));

需求3:将一个文本文件打印到控制台

1,

数据源:InputStrea,Reader

数据目的:OutputStream ,Writer

2,

是否是纯文本?

是。

数据源:Reader

数据目的:Writer.

3,

数据源:硬盘文件 FileReader

数据目的:控制台 System.out.因为目的是字节流,而操作的是字符流,所以要将字符流转成字节流到目的中。

使用到了转换流。 OutoutStreamWriter

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

// PrintStream ps = System.out;//还没学到。所以改了。

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

 

OutputStreamWriter osw = new OutputStreamWriter(System.out);

 

需要缓冲高效吗?需要。

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

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

 

需求4:后去键盘录入,并将数据打印到控制台。

自己完成。 

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

 

需求1:复制一个文本文件。将一个GBK编码的文件,复制到另一个用UTF-8编码的文件中。

1,

数据源:InputStrea,Reader

数据目的:OutputStream ,Writer

2,

是否是纯文本?

是。

数据源:Reader

数据目的:Writer.

3,

设备:

数据源:硬盘文件  

数据目的:硬盘文件。

涉及到编码数据。

源:是gbk FileReader 

目的:因为是UTF-8,所以只能使用转换流。转换流中需要明确具体的字节流和编码。

编码是UTF-8,字节流就是对应硬盘设备的FileOutputStream

 

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

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

需要高效就加上buffer

import java.io.*;

/*

Writer

|--OutputStreamWriter

|--FileWriter

Reader

|--InputStreamReader

|--FileReader

 

转换流其实就是将字节流和编码表相结合。将字节流中的字节数据,去查了具体的编码表。

所以转换流才可以获取一个中文字符。

 

那么转换流的子类用于操作文件的对象FileReader 就直接使用父类的具有转换功能的read方法。就可以一次读一个字符。

 

FileReader fr = new FileReader("a.txt");//该对象中已经内置了本机默认的字符编码表,

//对于简体中文版的机器默认编码表是GBK.

 

//通过字节读取流读取a.txt中中文数据,按照GBK编码表的来获取中文字符。

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");

 

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");

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

这两个句代码的功能是一样一样一样的。

 

区别:

第一句可以指定编码表。

第二句,固定本机默认编码表。

 

如果操作中文数据,仅使用本机默认码表,那么第二句书写简单。

如果操作中文数据,使用指定码表,必须使用第一句。 而且要将指定码表作为字符串传递到构造函数中。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头顶头发长得慢怎么办 每次洗头发都掉很多头发怎么办 拔了头发不长怎么办 6岁儿童头发稀少怎么办 2岁宝宝胆子小怎么办 坐到小孩的头怎么办 托班幼儿不刷牙怎么办 两岁的宝宝蛀牙怎么办 小孩在学校被打怎么办 油画棒画在墙上怎么办 宝宝把蜡笔吃了怎么办 吃鸡更新了怎么办开始 数字画涂料干了怎么办 广告画颜料干了怎么办 宝宝断奶后瘦了怎么办 腿一个粗一个细怎么办 两条小腿不一样粗怎么办 两岁宝宝坐不了怎么办 q糖孩子吃多了怎么办 q糖孩子吃的太多怎么办 ps图层不能覆盖怎么办 孩子的字写的不好怎么办 孩子爱打人怎么办 6招 一岁宝宝爱打人怎么办 2岁小朋友爱打人怎么办 小朋友爱动手怎么办4岁 5,6岁爱动手打人怎么办 七个月宝宝大便干燥怎么办 两岁宝宝吐奶怎么办 2岁宝宝轻微蛀牙怎么办 2岁宝宝喝水都吐怎么办 2岁宝宝吐的厉害怎么办 两岁宝宝个子矮怎么办 宝宝吐了一天了怎么办 3岁宝宝吃饭呕吐怎么办 3岁宝宝突然呕吐怎么办 11个月婴儿呕吐怎么办 2岁宝宝呕吐是怎么办 2岁宝宝呕吐腹泻怎么办 七个月的宝宝拉肚子怎么办 两岁宝宝玩手机怎么办