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

JAVA I/O 常见用法总结

2018-01-30 11:30 435 查看
对于 java IO 这块一直是云里雾里,每次用的时候不是百度就是翻书,虽然能实现结果,但总是理解的不清楚。偶尔又翻了《Java疯狂讲义》中的I/O一节,再加上动手实践,终于理清了常见用法的思路,真是百看不如一练。

Java I/O 的基类有2种。InputStream/Reader, OutputStream/Writer。

基类

① InputStream/Reader

InputStream/Reader 是输入流,这里的输入输出是相对于内存来说的。这两个类都是基类(抽象类),不能实例化对象,可以靠它的派生类来实例化对象,实现文件的各种操作。InputStream 是字节流,Reader 是字符流。

② OutputStream/Writer

OutputStream/Writer 是输出流,这里是指输出到磁盘等存储介质上,这两个类也都是基类,可以用它们的派生类来实现各种操作。OutputStream 是字节流,Writer 是字符流。

组合流过滤器

平常的操作大部分是针对文件的,而且字符类操作多一些,下面说一下两种常用的派生类。

① FileInputStream/FileReader

操作文件相关的输入流(字节)/输入字符

常用的实例化对象格式为:

FileInputStream input = new FileInputStream(File file);
FileReader reader = new FileReader(File file);


②FileOutputStream/FileWriter

操作文件相关的输出流(字节)/输入字符

实例化方式类似输入流。

转换流

在保存数据或者读取数据的时候往往需要指定编码,Java 提供了2中转换流:

① InputStreamReader

将包含字节的输入流转换为使用Unicode编码的字符流。

② OutputStreamWriter

将包含字节的输出流转换为使用Unicode编码的字符流

它们的构造函数需要指定 InputStream 或者 OutputStream 的对象 或者和支持的字符编码组合。如:

InputStreamReader in = new InputStreamReader(System.in);// 这个输入流读入器会使用系统默认的字符编码格式。
InputStreamReader in = new InputStreamReader(new FileInputStream("log.txt"), "GBK"); //使用构造函数中指定的编码格式读取指定文件


缓冲流

① BufferedInputStream/BufferedReader

其构造函数是已经存在的物理节点流,如: BufferedInputStream(InputStream in)

创建一个带缓冲期的流。带缓冲区的输入流在从流中读入字符时,不会每次都对设备访问,当缓冲区为空时,会向缓冲区读入一个新的数据块。

② BufferedOutputStream/BufferedWriter

其构造函数是已经存在的 输出流。

带缓冲区的输出流在收集要写出的字符时,不会每次都对设备访问,当缓冲区填满或者当流被冲刷时,数据就被写出。

写出文本输出

对于文本输出,可以使用PrintWriter,这个类拥有以文本格式打印字符串和数字的方法,还有一个将PrintWriter 链接到FileWriter 的便捷用法,可以直接使用:

PrintWriter out = new PrintWriter("employee.txt"); //等同于
PrintWriter out = new PrintWriter(new FileWriter("employee.txt"));


思考: 怎么实现改变文件的编码格式?

百度上搜索了半天,没有直接的api可以实现这一功能,只好自己实现,思路是:首先以指定编码格式读取源文件,把读取的内容可以存储到字符数组中,然后把字符数组转成字符串,再把字符串以指定的编码格式输出到目标文件中(源文件与目标文件可以是同一个文件),为了提高效率,可以使用Bufferd…的缓冲流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: