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
操作文件相关的输入流(字节)/输入字符
常用的实例化对象格式为:
②FileOutputStream/FileWriter
操作文件相关的输出流(字节)/输入字符
实例化方式类似输入流。
转换流
在保存数据或者读取数据的时候往往需要指定编码,Java 提供了2中转换流:
① InputStreamReader
将包含字节的输入流转换为使用Unicode编码的字符流。
② OutputStreamWriter
将包含字节的输出流转换为使用Unicode编码的字符流
它们的构造函数需要指定 InputStream 或者 OutputStream 的对象 或者和支持的字符编码组合。如:
缓冲流
① BufferedInputStream/BufferedReader
其构造函数是已经存在的物理节点流,如: BufferedInputStream(InputStream in)
创建一个带缓冲期的流。带缓冲区的输入流在从流中读入字符时,不会每次都对设备访问,当缓冲区为空时,会向缓冲区读入一个新的数据块。
② BufferedOutputStream/BufferedWriter
其构造函数是已经存在的 输出流。
带缓冲区的输出流在收集要写出的字符时,不会每次都对设备访问,当缓冲区填满或者当流被冲刷时,数据就被写出。
写出文本输出
对于文本输出,可以使用PrintWriter,这个类拥有以文本格式打印字符串和数字的方法,还有一个将PrintWriter 链接到FileWriter 的便捷用法,可以直接使用:
思考: 怎么实现改变文件的编码格式?
百度上搜索了半天,没有直接的api可以实现这一功能,只好自己实现,思路是:首先以指定编码格式读取源文件,把读取的内容可以存储到字符数组中,然后把字符数组转成字符串,再把字符串以指定的编码格式输出到目标文件中(源文件与目标文件可以是同一个文件),为了提高效率,可以使用Bufferd…的缓冲流。
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…的缓冲流。
相关文章推荐
- Java枚举的七种常见用法总结(必看)
- Java8中Optional的一些常见错误用法总结
- ACM常见高精度总结(java用法)
- Java枚举的七种常见用法总结(必看)
- JAVA学习:流相关面试题及常见用法总结
- Java File类常见用法总结
- java中String的常见用法总结
- 【Java】简单总结一下Java中printf()的用法
- Java 枚举类型(enum)的一个不常见用法
- Mysql中存储过程中的一些常见用法总结
- Java中final的用法总结
- Java中集合类用法总结(转)
- Java学习总结之第十六章 Socket用法详解
- Java中Static方法和Static程序块的用法总结
- java final用法总结
- java的常见异常与错误总结
- Java中的final和static用法总结
- 一些java中常见的基础问题的总结
- 【Java】简单总结一下Java中printf()的用法
- Java关键字final,static的用法总结