您的位置:首页 > 编程语言 > Java开发

Java学习---IO流的操作

2011-12-17 14:00 363 查看
/*

Java学习---IO流的操作

*/

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

一,IO流的基本知识

Java中关于IO流的操作,根据操作数据的格式不同分为字节流,字符流。

①常用的字符流操作有InputStreamReader, OutputStreamWriter,BufferedReader,BufferedWriter。

InputStreamReader,OuputStreamWriter称为转换流,字节传换成字符操作。感觉不同的构造函数,创建不同的对象。如果不需要指定字符编码集,可以使用FileReader,FileWriter对文本文件进行操作。使用字符流操作的时候要记得刷新流操作,换行操作newLine也要在flush方法前使用。BufferedWriter,BufferedReader称为字符缓冲流,为了提高字符操作的效率而设。

指定UTF-8编码表写法:

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

提高效率的写法:

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

如果使用默认的字符编码表-GBK

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

调高效率的写法:

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

指定UTF-8编码表写法:

InputStreamReader isr = new InputStreamReader(new FileInputStream("b.txt"),"UTF-8");

提高效率的写法:

BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("b.txt"),"UTF-8"));

如果使用默认的字符编码表-GBK

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

调高效率的写法:

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

②常用字节流FileInputStream,FileOutputStream,BufferedInputStream,BufferedOutputStream.

字节流用于操作图片或者媒体文件,字符流用于操作纯文本文件。

FileInputStream fis = new FileInputStream("c.gif");

FileOutputStream fos = new FileOutputStream("d.gif");

该缓冲区的字符流操作。

BufferedInputStream bis = new BufferedInputStream("c.gif");

BufferedOutputStream bos = new BufferedOutputStream("d.gif");

③终端操作

可以使用Java包中的System类中的方法进行终端操作。终端设备有,标准输入,标准输出,标准错误。这些操作都是面向字节的,如果需要提高效率可以使用转换流。

使用System的setIn,setOut,setErr方法可以进行终端重定向。

二,IO流的使用规律

分析一个问题首先要确定要操作对象的源和目的。

①,明确源和目的。

源:输入流。InputStream Reader

目的:输出流。OutputStream Writer

②,操作的数据时否是纯文本。

是:字符流。

不是:字节流。

③,当体系明确后在明确要使用哪个具体的对象。

通过设备来区分:

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

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

实例分析一:

需求:将一个文件中的数据存储到另一个文件中。复制文件。

源:文本文件 Reader 体系明确,字符流。

接下明确对象,设备是硬盘 Reader体系中可以操作文件的FileReader。

目的:文本文件 Writer 体系明确,字符流。

明确设备:文件 Writer体系中可以操作文件的FileWriter。

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

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

是否需要提高效率:是!加入相应体系中的缓冲区。

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

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

实例分析二:

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

这个需求中有源和目的。

源:键盘 纯文本文件 选择字符流 Reader

设备:键盘 对应的对象时System.in。

不是选择Reader吗?System.in对应的不是字节流?

为了操作键盘的文本数据方便,转成字符流按照字符串操作最方便。

既然明确了Reader,那么就将System.in转化成Reader。用到了Reader体系中的

转换流,InputStreamReader

InputStreamReader isr = new InputStreamReader(System.in);

需要提高效率吗?需要!BufferedReader

BufferedReader bufr = new BufferedReader(isr);

目的:文件 纯文本 选择Writer

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

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

需要提高效率吗?是!BufferedWriter

BufferedWriter bufw = new BufferedWriter(fw);

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

扩展一下,想要把录入的数据按照指定的编码表,将数据保持到文件中。

目的:文件 纯文本 选择Writer

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

FileWrter使用默认编码表是GBK。

但是存储时需要加入指定的字符编码表,而指定的编码表只能转换流可以指定。

所以使用的对象是OutputStreamWriter。

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

OutputStreamWriter opw = new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");

需要提高效率吗?是!BufferedWriter

BufferedWriter bufw = new BufferedWriter(opw);

转换流什么时候使用?

字符与字节的桥梁,设计到字符编码转换时,需要用到转换流。

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

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: