字符流:

文本和文本文件的区别:
文本:
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)。
文件:
文件是byte byte byte…的数据序列。
文本文件:
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果。

字符流(Reader,Writer)
操作的是文本文件。对于mp3,二进制文件是字节文件不适合用字符流读取,因为读取出来的是char,没有意义。
字符的处理,一次处理一个字符
字符的底层仍然是基本的字节序列

字符流(字节字符转换流)的基本实现:
InputStreamReader:
完成byte流解析为char流,按照编码解析
OutputStreamWriter:
提供char流到byte流,按照编码处理

字符流的基本方法的使用:

package com.test.FileInputStreamReader;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;public class FileInputStreamReaderTest {public static void main(String[] args){try {String filename = "C:\\Users\\Administrator\\Desktop\\javaIO\\读取的测试文件.txt";ReadFile1(filename);ReadFile2(filename);} catch (Exception e) {e.printStackTrace();}}/*** 单字符读取* 返回的是读到字节转换成int类型(最后8位)的值* @param fis*/public static void ReadFile1(String filename) throws IOException{System.out.println("单字节读取的方式:");InputStreamReader isr = new InputStreamReader(new FileInputStream(filename));//默认的是项目的编码(这里是gbk)
//      InputStreamReader isr = new InputStreamReader(fis, "gbk");int i;while((i = isr.read())!=-1){System.out.print((char)i);}isr.close();}/*** 批量读取* 放入buf这个字符数组中,从第0个位置开始放置,最多放buf.length个* 返回的是读到字符的个数* @param fis* @throws IOException*/public static void ReadFile2(String filename) throws IOException{System.out.println();System.out.println("批量读取的方式:");InputStreamReader isr = new InputStreamReader(new FileInputStream(filename));//默认的是项目的编码(这里是gbk)char[] buf = new char[2*1024];int i;while((i = isr.read(buf, 0, buf.length))!=-1){
//          //第一种转换成字符的方式
//          for(int j = 0;j<i;j++){//              System.out.print((char)buf[j]);
//          }//第二种转换成字符串的方式String str = new String(buf,0,i);System.out.println(str);}isr.close();}}

结果截图:

注意:在操作字符流的时候要注意编码的问题。这里读取的文件是gbk编码格式的,所以在读取的时候要采用gbk编码的读取方式。否则就会出现乱码。

FileWriter和FileReader:
其实上边的代码中的:
InputStreamReader isr = new InputStreamReader(new FileInputStream(String filename));
这部分代码完全可以使用
FileReader fr = new FileReader(String filename);
来替代。
FileReader和FileWriter的基本方法的使用:

package com.test.FileReaderAndFileWriter;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class FileReaderAndFileWriterTest{public static void main(String[] args) throws IOException{FileReader fr = new FileReader("C:\\Users\\Administrator\\Desktop\\javaIO\\读取的测试文件.txt");//缺点:不过这里只能识别项目默认的编码不能设置其他的编码,如果读取的文件编码不是项目默认的编码,读取时就会出现乱码FileWriter fw = new FileWriter("C:\\Users\\Administrator\\Desktop\\javaIO\\写出的测试文件.txt");char[] buf = new char[2*1024];int i;while((i = fr.read(buf, 0, buf.length))!=-1){fw.write(buf, 0, i);fw.flush();}fr.close();fw.close();}}

注意:FileReader和FileWriter与之前的代码中通过InputStreamReader包装FileInputStream相比,虽然简洁,但是不能设置采用什么编码读取文件,只能使用项目默认的编码读取文件。

字符流的过滤器:
BufferedReader——>readLine 一次读一行
BufferedWriter/PrintWriter———>写一行

package com.test.BufferedReaderAndBufferedWriter;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;public class BufferedReaderTest {public static void main(String[] args){String filename = "C:\\Users\\Administrator\\Desktop\\javaIO\\读取的测试文件.txt";try {BufferedWriter(filename);PrintWriter(filename);} catch (IOException e) {e.printStackTrace();}}/*** 使用BufferedWriter写出* @throws IOException*/public static void BufferedWriter(String filename) throws IOException{BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\javaIO\\测试文件1.txt")));String line;while((line = br.readLine())!=null){//但是这里的readLine并不识别换行符System.out.println(line);
//          bw.write(line);//写出的文件内容没有进行换行
//          bw.write(line+"\r\n");//这里再写出文件的时候要单独写出换行操作bw.write(line);bw.newLine();//换行操作bw.flush();}br.close();bw.close();}/*** 使用PrintWriter写出* @param filename* @throws IOException*/public static void PrintWriter(String filename) throws IOException{BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));PrintWriter pw = new java.io.PrintWriter("C:\\Users\\Administrator\\Desktop\\javaIO\\测试文件2.txt");String line;while((line = br.readLine())!=null){pw.println(line);pw.flush();}br.close();pw.close();}
}

上边这两种写出文件的方法的效果是一样的。

字符流---IO学习笔记(三)相关推荐

  1. Java IO学习笔记总结

    Java IO学习笔记总结 前言 前面的八篇文章详细的讲述了Java IO的操作方法,文章列表如下 基本的文件操作 字符流和字节流的操作 InputStreamReader和OutputStreamW ...

  2. 【AngularJs学习笔记三】Grunt任务管理器

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  3. 字节流字符流IO资源处理PropertiesResourceBundle

    字节流&字符流&IO资源处理&Properties&ResourceBundle - 能够使用字节输入流读取数据到程序//1.创建FileInputStream对象,构 ...

  4. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

  5. K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程

    K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...

  6. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

  7. MySQL学习笔记(三)查询

    写在前面:本篇为作者自学总结,学习内容为课堂所学和网络学习笔记汇总,对于内容引用部分在文中和文末注明. 文章仅供参考,如需深入了解,请查阅MySQL参考手册.附上下载链接: 链接:https://pa ...

  8. Stream 流 【学习笔记】Java 基础

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 写这篇博客旨在制作笔记,方便个人在线阅览,巩固知识,无其他用途. 学习视频 [黑马 Java 基础教程] ...

  9. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

最新文章

  1. 科学养猪的真正奥义,培养拯救人类的医学英雄
  2. R语言中的%in%操作符是干什么的?
  3. MongoDB数据库使用总结
  4. MyBatis源码分析-IDEA新建MyBatis源码工程
  5. 遍历List过程中同时修改
  6. oracle 查看动态性能视图,oracle常用动态性能视图
  7. FPGA设计经验总结
  8. 【STM8】STM8在STVD平台生成HEX和S19文件的方法
  9. 如何设置word的有效期
  10. 解决opencv打开视频上下翻转问题
  11. 手机上能不跳转就不跳转
  12. 使用ietest来模拟ie6丢失session问题解决方法
  13. 和我一起写lua - 确认操作系统
  14. intel dpdk api rte_eal_hpet_init() 函数介绍
  15. EasyReport
  16. 【idea】如何设置默认的JDK
  17. 深信服超融合技术架构(重点介绍主要模块)
  18. OSChinaiOS客户端源码剖析001(架构篇)
  19. C语言结构体error: invalid use of incomplet type ‘ struct people’
  20. QBC以及QBE例子

热门文章

  1. python mock_Python中使用mock.Mock()进行mock测试
  2. webpack(2)--开发环境基本配置
  3. 幼儿编程学java不_《终于有人说出来了——Java不适合于作为主要编程教学语言》我的看法...
  4. The server time zone value ‘XXXXXX’ is unrecognized or represents more than one time zone
  5. java设计模式之UML②类图讲解
  6. ImportError: cannot import name 'is_string_like'
  7. ANN:神经网络堆叠/进化故事( 从感知机到DRBN )
  8. 可以获得索引值码_SEO优化可以为网站带来更高的业务销售额
  9. 人人都能学会的python编程教程(基础篇)完整版
  10. 互联网产品设计常用文档类型-BRD、MRD、PRD、FSD