上节我们讲到「Java中常用流:数据流和对象流」,本节我们学习文件字符流和文件缓冲流~

文件字符流

前面介绍的文件字节流可以处理所有的文件,但是字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作。

【示例1】使用FileReaderFileWriter实现文本文件的copy

package com.bjsxt.io;

import java.io.*;

/**

* 测试文件字符流

@author 尚学

*

*/

public class Demo07 {

public static void main(String[] args) {

//写法和使用stream基本一样。只不过,读取时是读取的字符。

FileReader fr = null;

FileWriter fw = null;

int c = 0;

try {

fr = new FileReader("d:/a.txt");

fw = new FileWriter("d:/d.txt");

while((c=fr.read())!=-1){

fw.write(c);

}

}   catch (FileNotFoundException e) {

e.printStackTrace();

catch (IOException e) {

e.printStackTrace();

}finally{

try {

if(fw!=null){

fw.close();

}

catch (IOException e) {

e.printStackTrace();

}

try {

if(fr!=null){

fr.close();

}

catch (IOException e) {

e.printStackTrace();

}

}

}

}

字符缓冲流

BufferReader/BufferWriter增加了缓存机制,大大提高了读写文本的效率,同时,提供了方便的按行读的方法:readLine();  处理文本时,我们一般可以使用字符缓冲流。

【示例2】使用BufferReaderBufferWriter实现文本文件的复制

import java.io.*;

public class Demo08 {

public static void main(String[] args) {

// 注:处理文本文件时,实际开发中可以用如下写法,简单高效!!

FileReader fr = null;

FileWriter fw = null;

BufferedReader br = null;

BufferedWriter bw = null;

String tempString = "";

try {

fr = new FileReader("d:/a.txt");

fw = new FileWriter("d:/d.txt");

br = new BufferedReader(fr);

bw = new BufferedWriter(fw);

while ((tempString = br.readLine()) != null) {

bw.write(tempString);

}

catch (FileNotFoundException e) {

e.printStackTrace();

catch (IOException e) {

e.printStackTrace();

finally {

try {

if(bw!=null){

bw.close();

}

catch (IOException e1) {

e1.printStackTrace();

}

try {

if(br!=null){

br.close();

}

catch (IOException e1) {

e1.printStackTrace();

}

try {

if(fw!=null){

fw.close();

}

catch (IOException e) {

e.printStackTrace();

}

try {

if(fr!=null){

fr.close();

}

catch (IOException e) {

e.printStackTrace();

}

}

}

}

到本章节为止,我们已经学习了大部分的常见流,下节我们学习常见流的最后一篇~~


「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

  笔记包含从浅入深的六大部分:

A-Java入门阶段

B-数据库从入门到精通

C-手刃移动前端和Web前端

D-J2EE从了解到实战

E-Java高级框架精解

F-Linux和Hadoop

转载于:https://blog.51cto.com/javanew/1944626

10.6-全栈Java笔记:常见流详解(四)相关推荐

  1. 10.4-全栈Java笔记:常用流详解(二)

    上节我们讲到「Java中常用流:文件字节流和字节数组流」,本节我们继续走起~  缓冲流 BufferedInputStream和BufferedOutputStream这两个流是处理流,通过内部缓存数 ...

  2. Python全栈开发-数据分析-03 Pandas详解 (中)

    Pandas详解 (中) 一. 处理缺失值 1.1 drop函数:删除行,删除列 1.删除某列或某行数据可以用到pandas提供的方法drop 2.drop方法的用法: drop(labels, ax ...

  3. Python全栈开发-数据分析-02 Pandas详解 (上)

    Pandas详解 (上) 一. 安装pandas 1.按Win+R,输入CMD确定, 输入 pip install pandas 回车 还要安装xlrd,否则你打不开Excel文件 pip insta ...

  4. Python全栈开发-数据分析-03 Pandas详解 (下)

    Pandas详解 (下) 一. Excel文件的拆分与合并 1.1 一个文件夹下多个工作簿的合并[单独Sheet] 思路: 1,把文件夹下面所有的文件都遍历出来 2.循环读取每个文件 (1)第一次读取 ...

  5. java全栈系列之JavaSE--递归详解022

    递归 通俗来讲递归就是自己调用自己,例如:方法A调用方法A,递归可以大大减少程序的代码量,递归调用次数过多会严重影响机器的性能 如下,我定义了一个方法名字叫demo,在demo方法里面自己调用自己 p ...

  6. java全栈系列之JavaSE--Arrays类详解027

    数组工具类java.util.Arrays Arrays类的常用功能: 给数组赋值,通过fill方法 对数组进行排序,通过sort方法 比较数组,通过equals方法比较两数组的元素值是否相等 查找数 ...

  7. python全栈示例_Python全栈之路--Django ORM详解

    ORM:(在django中,根据代码中的类自动生成数据库的表也叫--code first) ORM:Object Relational Mapping(关系对象映射) 我们写的类表示数据库中的表 我们 ...

  8. 10.8-全栈Java笔记:序列化/反序列化的步骤和实例

    本节我们详细讲解10.3节中提到的序列化和反序列化操作. 序列化和反序列化是什么 当两个进程远程通信时,彼此可以发送各种类型的数据. 无论是何种类型的数据,都会以二进制序列的形式在网络上传送.比如,我 ...

  9. 11.3-全栈Java笔记:线程的生命周期

    一个线程对象在它的生命周期内,需要经历5个状态. 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态 ...

最新文章

  1. SIGPIPE导致cronttab和shell脚本等工作异常
  2. 科学家研发机器人混入南极企鹅群 获“友好”对待
  3. boost::mpi::cartesian_communicator相关用法的测试程序
  4. 避免修改构造函数输入参数引起的 breaking change
  5. php.ini详细介绍与设置,配置
  6. pq 中m函数判断嵌套_你还在用IF函数进行逻辑判断吗?试试PQ,简单又实用
  7. 【路径规划】基于matlab GUI人工势场算法机器人避障路径规划(手动设障)【含Matlab源码 617期】
  8. Docker部署AI算法教程
  9. 软考-信息系统项目管理师-项目进度管理
  10. 2021-08-05 得帆技术培训Linux作业
  11. CSS压缩之:正则五步替换法
  12. 华为云云耀云服务器 中小企业的福音
  13. chrome-调试按钮详解
  14. 【飞书集成自建应用教程】
  15. clipboard 多次回调
  16. 【学习笔记】群论基础
  17. 机器学习(二)--sklearn之逻辑斯蒂回归和朴素贝叶斯
  18. 卓普zp900s手机root和data大小调整经验
  19. 使用esp32cam与stm32c8t6核心板开发的99A静改动
  20. Charles的功能介绍与使用教程,一学就会,不信就来试试?

热门文章

  1. ldap基本dn_LDAP 中 DN CN DC OU
  2. html中basefont标签,HTML的basefont标签
  3. java工程怎么构造成moven_将普通java工程结构改为由maven管理的工程结构域
  4. 华gt2升级鸿蒙,华为手表GT2 Pro已开始内部测试,升级鸿蒙操作系统
  5. 微信小程序弹出框竖向滚动_微信小程序 解决自定义弹出层滑动时下层页面滚动问题...
  6. Springboot定时任务原理及如何动态创建定时任务
  7. Uvaoj 11248 Frequency Hopping(Dinic求最小割)
  8. redhat enterprise linux 哪个版本好,Red Hat Enterprise Linux 版本显示中(Santiago)是啥意思?...
  9. Java一次编译,到处运行是如何实现的
  10. 服务器修改地址,服务器修改管理地址