JAVA I/O 常见用法总结

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

  1. 基类

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

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

  2. 组合流过滤器

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

    ① FileInputStream/FileReader
    操作文件相关的输入流(字节)/输入字符
    常用的实例化对象格式为:

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

    ②FileOutputStream/FileWriter
    操作文件相关的输出流(字节)/输入字符
    实例化方式类似输入流。

  3. 转换流
    在保存数据或者读取数据的时候往往需要指定编码,Java 提供了2中转换流:
    ① InputStreamReader
    将包含字节的输入流转换为使用Unicode编码的字符流。
    ② OutputStreamWriter
    将包含字节的输出流转换为使用Unicode编码的字符流

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

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

    ① BufferedInputStream/BufferedReader
    其构造函数是已经存在的物理节点流,如: BufferedInputStream(InputStream in)
    创建一个带缓冲期的流。带缓冲区的输入流在从流中读入字符时,不会每次都对设备访问,当缓冲区为空时,会向缓冲区读入一个新的数据块。

    ② BufferedOutputStream/BufferedWriter
    其构造函数是已经存在的 输出流。
    带缓冲区的输出流在收集要写出的字符时,不会每次都对设备访问,当缓冲区填满或者当流被冲刷时,数据就被写出。

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

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

思考: 怎么实现改变文件的编码格式?
百度上搜索了半天,没有直接的api可以实现这一功能,只好自己实现,思路是:首先以指定编码格式读取源文件,把读取的内容可以存储到字符数组中,然后把字符数组转成字符串,再把字符串以指定的编码格式输出到目标文件中(源文件与目标文件可以是同一个文件),为了提高效率,可以使用Bufferd…的缓冲流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值