一、字符流

BufferedReader:BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中
BufferedWriter:把一批数据写入到缓冲区,当缓冲区区的满时,再把缓冲区的内容写到字符输出流中

二、对文本文件的读写

2.1、字符输入流

2.2、字符输出流

2.3、综合使用

package com.pb.io.buffered;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class BufereTest {
/*BufferedWriter* 1.需要修饰到一个指定的输出流(例如:FileWriter)还可以是其它的* 2.BufferedWriter会覆盖原有文件内容* 3.需要清空缓冲区,使用flush()方法* BufferedReader* 1.需要修饰到一个指定的输入流(例如:FileReader)还可以是其它的* 2.关闭流*/public static void main(String[] args) {/** BufferedWriter写操作*/try {//1.创建文件输出流FileWriterFileWriter fw=new FileWriter("d:/test/test.txt");  //这里没有加true,是清空文件重新写入,可以加入true//2.实例化。BufferedWriter对象包装类BufferedWriter bw=new BufferedWriter(fw);//3.写入内容bw.write("大家好!");bw.write("我要修改内容了");bw.newLine();  //换行bw.write("哈哈,我修改完了!");bw.newLine();//4.清空缓冲区
            bw.flush();//5.关闭流
            bw.close();fw.close();System.out.println("==========写入文件结束======");} catch (IOException e) {e.printStackTrace();}/** BufferedReader读文件*/try {//1.声明文件读取对象FileReader fr=new FileReader("d:/test/test.txt");//2.声明BufferedRead对象BufferedReader br=new BufferedReader(fr);//3.开始读取文件System.out.println("========开始读取文件========");String date;while((date=br.readLine())!=null){System.out.println(date);}System.out.println("========读取文件结束========");//4.关闭流
            br.close();fr.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

结果:

==========写入文件结束======
========开始读取文件========
大家好!我要修改内容了
哈哈,我修改完了!
========读取文件结束========

三、字节-字符转换流

  • OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流输出对象。
  • InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。
 

FileOutputStream是OutputStream 的直接子类,FileInputStream也是InputStream的直接子类,
但是在字符流文件的两个操作类却有一些特殊,FileWriter并不直接是Writer的子类,而是OutputStreamWriter的子类,
而FileReader也不直接是Reader的子类,是InputStreamRader的子类,
那么从这两个类的继承关系就可以清楚的发现,不管是使用字节流还是字符流实际上最终都是以字节的形式操作输入输出流的。

例1.实现文本文件的复制

s1.txt内容明月几时有,
把酒问青天,
不知道天上宫阙,
今夕是何年。

package com.pb.io.buffered;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;/** 实现文本文件的复制*使用BufferedReader和BufferedWriter来实现*/
public class BuffereDemo1 {public static void main(String[] args) {try {//1.声明BufferedReader和BufferedWriter对象InputStreamReader  isr=new InputStreamReader(new FileInputStream("d:/test/s1.txt"), "GB2312");  //解决中文乱码//FileReader fr=new FileReader("d:/test/s1.txt");  BufferedReader br=new BufferedReader(isr);OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("d:/test/s2.txt"),"GB2312");//FileWriter fw=new FileWriter("d:/test/s2.txt"); //s2并不存在,会自动创建BufferedWriter bw =new BufferedWriter(osw);//2.开始读取文件String line;  //声明变量用来用来存放读出的内容int num=1;//用来记录行数while((line=br.readLine())!=null){System.out.println("=========正在读出第"+num+"行===========");System.out.println(line);System.out.println("=========正在写入第"+num+"行===========");bw.write(line);num++;}System.out.println("======文件写入结束========");//清空缓冲区
            bw.flush();//关闭输出流
            bw.close();osw.close();System.out.println("======文件读取结束========");//关闭输入流
            br.close();isr.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

Java从零开始学三十六(JAVA IO- 字符流)相关推荐

  1. Java Review(三十六、IO)

    文章目录 File 类 访问文件和目录 1.访问文件名相关的方法 2. 文件检测相关的方法 3. 获取常规文件信息 4. 文件操作相关的方法 5. 目录操作相关的方法 文件过滤器 IO流概览 流的分类 ...

  2. python123 io平台-Java Review(三十六、IO)

    Java 的 IO 通过 java.io 包下的类和接口来支持, 在 java.io 包下主要包括输入. 输出两种 10 流, 每种输入. 输出流又可分为字节流和字符流两大类. 其中字节流以字节为单位 ...

  3. Java从零开始学四十六(Junit)

    一.软件测试 软件开发: 项目调研--需求分析--软件设计--程序编码--软件测试--运行维护 软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,使用人工或者自动手段来运行或测试某个系 ...

  4. Java从零开始学四十五(Socket编程基础)

    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  5. Java多线程学习三十六:主内存和工作内存的关系

    CPU 有多级缓存,导致读的数据过期 由于 CPU 的处理速度很快,相比之下,内存的速度就显得很慢,所以为了提高 CPU 的整体运行效率,减少空闲时间,在 CPU 和内存之间会有 cache 层,也就 ...

  6. Java从零开始学三(public class和class)

    使用public class和class声明的区别 public class文件名称必须与类名称一致 class文件名称可以与类名称不一致 转载于:https://www.cnblogs.com/li ...

  7. Java学习笔记二十六:Java多态中的引用类型转换

    Java多态中的引用类型转换 引用类型转换: 1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换: 2.向下类型转换(强制类型转换),是大类型到小类型的转换: 3.instanceof运算 ...

  8. 教妹学Java(三十六):Java 多态的好处

    你好呀,我是沉默王二,(目前是)CSDN 周排名前十的博客专家.这是<教妹学 Java>专栏的第三十六篇,今天我们来谈谈 Java 中的多态--多态有什么好处? 本专栏中的代码已收录到 G ...

  9. 三十六、Java集合中的HashMap

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

最新文章

  1. git操作手册_基本的Git手册
  2. 一句代“.NET技术”码实现批量数据绑定[上篇]
  3. java 文件字节流_Java:文件字符流和字节流的输入和输出
  4. Linux——进程间通信(总结)
  5. 关于Layout Weight一些使用技巧
  6. Delphi编程修改ProgressBar的颜色
  7. office2007右键doc,xls
  8. Git 的BUG小结
  9. 线代中最基础的两种玩法
  10. Oracle的三种高可用集群方案
  11. 当出现opencv的.dll无法找到的问题的时候用一下处理方法
  12. 它!5 年代替狂卷的 CNN!
  13. visio阵列_用Visio2010制作最专业的技术流程图教程
  14. 【2020】【论文笔记】相变材料与超表面——
  15. rfid破解 BLE Hacking
  16. ThreeJs 数据可视化学习扫盲
  17. “我明白”, “I Understand”的其他英语表达方式
  18. MySQL数据库的高级SQL语句
  19. java我的世界教学视频,快来看鸭~
  20. python处理skl参数、ubuntu下翻译选中文字

热门文章

  1. 材价看板(1)- 如何建立你的第一个kanban,看看这些暴露的问题你们有没有?...
  2. pthreads v3下的worker和pool的使用
  3. 可视化理解卷积神经网络 - 反卷积网络 - 没看懂
  4. Android Menu
  5. 如何区分数据科学家,数据工程师与数据分析师
  6. java---多线程及线程的概念
  7. 程序生成30道四则运算(包括整数和真分数)
  8. jQuery.unique引发一个血案
  9. Oracle sql语句简单优化
  10. mysql 自动备份_windows mysql 自动备份的几种方法