为什么出现字符流?因为字节流操作中文不是特别方便,所以Java就提供字符流;字符流=字节流+编码表;字节流复制文本文件时也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文,如何识别中文呢?是因为汉字在存储时无论选择哪种编码存储,第一个字节都是负数。

字符流写数据的五种方式:

1.void write(int c); 写一个字符

public class demo {public static void main(String[] args) throws IOException {//FileInputStream fis = new FileInputStream("D:\\wkx\\shangluo");FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.chengzi.txt");OutputStreamWriter ow = new OutputStreamWriter(fos);ow.write(97);ow.flush();ow.write(98);ow.close();}
}

2.void write(char[] cbuf); 写一个字符数组

public class demo {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.chengzi.txt");OutputStreamWriter ow = new OutputStreamWriter(fos);char [] ch ={97,98,99,100};ow.write(ch);ow.close();}
}

3.void write(char[] cbuf,int off, int len);写一个字符数组的一部分

public class demo {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.chengzi.txt");OutputStreamWriter ow = new OutputStreamWriter(fos);char [] ch ={97,98,99,100};ow.write(ch,0,2);ow.close();}
}

4.void write(String str);写一个字符串

public class demo {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.chengzi.txt");OutputStreamWriter ow = new OutputStreamWriter(fos);ow.write("chengzi");ow.close();}
}

5.void write(String str,int off , int len);写一个字符串的一部分

public class demo {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("D:\\wkx\\shangluo\\.chengzi.txt");OutputStreamWriter ow = new OutputStreamWriter(fos);ow.write("chengzi",0,5);ow.close();}
}

flush方法和close方法的区别:close释放资源前进行一次刷新流,close执行后不能在写内容;而flush是刷新流,执行完毕依旧可以写内容;

字符流读数据两种方式:

1.int read();一次读取一个字符数据

public class demo {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("D:\\wkx\\shangluo\\.chengzi.txt");InputStreamReader ir = new InputStreamReader(fis);int ch;while ((ch=ir.read())!=-1){System.out.print((char)ch);}}
}

2.int read(char[] cbuf);一次读取一个字符数组数据

public class demo {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("D:\\wkx\\shangluo\\.chengzi.txt");InputStreamReader ir = new InputStreamReader(fis);char [] cha = new char[1024];int len;while ((len=ir.read(cha))!=-1){System.out.print(new String (cha,0,len));}}
}

字符流复制文件案例:

public class demo {public static void main(String[] args) throws IOException {InputStreamReader sr = new InputStreamReader(new FileInputStream("D:\\wkx\\shangluo\\.chengzi.txt"));OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("D:\\wkx\\shangluo\\橙子.txt"));char [] ch = new char[1024];int len;while ((len=sr.read(ch))!=-1){os.write(new String(ch,0,len));}sr.close();os.close();}
}

简洁:

public class demo {public static void main(String[] args) throws IOException {FileReader sr = new FileReader("D:\\wkx\\shangluo\\.chengzi.txt");FileWriter os = new FileWriter("D:\\wkx\\shangluo\\橙子.txt");int ch;while ((ch=sr.read())!=-1){os.write((char)ch);}sr.close();os.close();}
}

字符缓冲流:

BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或使用默认,默认可用于大多数用途;

BufferedReader:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或使用默认,默认可用于大多数用途;

构造方法:BufferedWriter(Writer out);      BufferedReader(Reader  in);

public class demo {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("D:\\wkx\\shangluo\\.chengzi.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\wkx\\shangluo\\橙子.txt"));char [] ar = new char[1024];int len;while ((len=br.read(ar))!=-1){bw.write(new String(ar,0,len));}br.close();bw.close();}
}

使用缓冲流复制文件效率更高;

字符缓冲流特有功能:

BufferedWriter:   void   newLine():写一行行分隔符,行分隔符字符串由系统属性定义

BufferedReader: public String  readLine():读一行文字,结果包含行的内容的字符串,不包含任何终止字符,如果流的结尾已经到达,则为null

public class demo {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("D:\\wkx\\shangluo\\.chengzi.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\wkx\\shangluo\\橙子.txt"));String len;while ((len=br.readLine())!=null){bw.write(len);bw.newLine();bw.flush();}br.close();bw.close();}
}

什么是字符流?为什么会有字符流?相关推荐

  1. [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)...

    一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...

  2. 无法在流的结尾之外进行读取_IO流,字节流,字符流

    IO流 输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是"读",读取外部数据). 输出(Output)指的是:程序输出数据给外部系统从而可以操作外部系统(核心含义 ...

  3. Java-Java I/O流解读之基于字符的I / O和字符流

    概述 Abstract superclass Reader and Writer File IO Character-Streams - FileReader FileWriter Buffered ...

  4. c语言fgetc()函数(从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动)

    C 标准库 - <stdio.h> 文章目录 描述 声明 参数 返回值 实例 描述 C 库函数 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一 ...

  5. .dat文件写入byte类型数组_文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流...

    一.实操名称: 描述如下流的基本作用:文件字节流.文件字符流.缓冲字节流.缓冲字符流字节数组流.数据流.转换流.对象流二.描述1.文件字节流:包括:FileInputStream,FileOutput ...

  6. Java19-day10【标准输入输出流、字节字符打印流、对象序列化-反序列化流、serialVersionUIDtransient、Properties】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  7. 找第一个只出现一次的字符_剑指offer 字符流中第一个只出现一次的字符

    题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是'g'.当从该字符流中读出前六个字" ...

  8. java 字符流 utf8,JAVA基础(字符流设置编码读写字符)

    1,使用指定的码表读写字符 FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表) FileWriter是使用默认码 ...

  9. 【Java I/O流】File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-with-resources语句

    I/O流 File File 常用方法 File 练习:搜索.删除.剪切 字符集(Character Set) 字符编码(Character Encoding) 字符编码比较 乱码 try-with- ...

  10. Java之节点流和处理流(Buffered字节字符处理流)

    文章目录 前言 基本介绍 Buffered字符处理流 BufferedReader缓冲字符输入流 BufferedWriter缓冲字符输出流 文件拷贝 Buffered字节处理流 文件拷贝(二进制文件 ...

最新文章

  1. ps制作20种特效文字_ps技巧:给照片制作特效(刀光剑影)
  2. AWS开源Firecracker,一种运行多租户容器服务的新虚拟化技术
  3. 使用python线性规划学习总结
  4. 账簿登记重要十条规则
  5. 在HTML文件中加载js
  6. 电脑中毒的表现有哪些?电脑中毒了怎么办?
  7. python调试神器_你必须拥有的Python调试神器
  8. Mongodb密码安全设置
  9. php study 后门,phpStudy后门简要分析
  10. Python基础学习----异常
  11. Building a LAMP Server
  12. 安装sql2012 正在启动操作系统功能NetFx3
  13. 深度linux如何打开exe文件,在deepin中简单粗暴地执行exe程序
  14. webpack项目篇(六十六):react 全家桶 和 webpack 开发 h5 商城项目的整体思路
  15. linux环境下载jadx
  16. 2020年美容师(初级)多少钱及美容师(初级)模拟考试题库
  17. 树莓派制作自己的小车车(上)
  18. 3.2_backpack_背包问题
  19. 戴尔T640服务器使用nvidia显卡风扇转速百分之百解决方案
  20. Maven引入依赖后自动下载并关联源码 Source

热门文章

  1. 安达发APS高级计划与排产解决方案
  2. 基于php023通用作业批改提交系统
  3. 龙芯Mips平台vmlinux文件分析
  4. Vite构建的Vue3项目打包部署到Gitee —— 全网最详细系列
  5. CAD制图初学入门攻略又双叒叕来啦!千万别错过哦~
  6. 酷安java_Java实现简易爬虫--抓取酷安网用户头像
  7. 小技巧--table表格td内容垂直居中方法
  8. 人工智能VS机器学习:最大的区别是什么?
  9. 【好文导读】人工智能和机器学习的富有启迪的文章2018
  10. 统一旗下被遗忘的“奶茶之王”,居然还在闷声发财?