什么是字符流?为什么会有字符流?
为什么出现字符流?因为字节流操作中文不是特别方便,所以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();}
}
什么是字符流?为什么会有字符流?相关推荐
- [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)...
一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...
- 无法在流的结尾之外进行读取_IO流,字节流,字符流
IO流 输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是"读",读取外部数据). 输出(Output)指的是:程序输出数据给外部系统从而可以操作外部系统(核心含义 ...
- Java-Java I/O流解读之基于字符的I / O和字符流
概述 Abstract superclass Reader and Writer File IO Character-Streams - FileReader FileWriter Buffered ...
- c语言fgetc()函数(从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动)
C 标准库 - <stdio.h> 文章目录 描述 声明 参数 返回值 实例 描述 C 库函数 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一 ...
- .dat文件写入byte类型数组_文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流...
一.实操名称: 描述如下流的基本作用:文件字节流.文件字符流.缓冲字节流.缓冲字符流字节数组流.数据流.转换流.对象流二.描述1.文件字节流:包括:FileInputStream,FileOutput ...
- Java19-day10【标准输入输出流、字节字符打印流、对象序列化-反序列化流、serialVersionUIDtransient、Properties】
视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...
- 找第一个只出现一次的字符_剑指offer 字符流中第一个只出现一次的字符
题目描述: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是'g'.当从该字符流中读出前六个字" ...
- java 字符流 utf8,JAVA基础(字符流设置编码读写字符)
1,使用指定的码表读写字符 FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表) FileWriter是使用默认码 ...
- 【Java I/O流】File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-with-resources语句
I/O流 File File 常用方法 File 练习:搜索.删除.剪切 字符集(Character Set) 字符编码(Character Encoding) 字符编码比较 乱码 try-with- ...
- Java之节点流和处理流(Buffered字节字符处理流)
文章目录 前言 基本介绍 Buffered字符处理流 BufferedReader缓冲字符输入流 BufferedWriter缓冲字符输出流 文件拷贝 Buffered字节处理流 文件拷贝(二进制文件 ...
最新文章
- ps制作20种特效文字_ps技巧:给照片制作特效(刀光剑影)
- AWS开源Firecracker,一种运行多租户容器服务的新虚拟化技术
- 使用python线性规划学习总结
- 账簿登记重要十条规则
- 在HTML文件中加载js
- 电脑中毒的表现有哪些?电脑中毒了怎么办?
- python调试神器_你必须拥有的Python调试神器
- Mongodb密码安全设置
- php study 后门,phpStudy后门简要分析
- Python基础学习----异常
- Building a LAMP Server
- 安装sql2012 正在启动操作系统功能NetFx3
- 深度linux如何打开exe文件,在deepin中简单粗暴地执行exe程序
- webpack项目篇(六十六):react 全家桶 和 webpack 开发 h5 商城项目的整体思路
- linux环境下载jadx
- 2020年美容师(初级)多少钱及美容师(初级)模拟考试题库
- 树莓派制作自己的小车车(上)
- 3.2_backpack_背包问题
- 戴尔T640服务器使用nvidia显卡风扇转速百分之百解决方案
- Maven引入依赖后自动下载并关联源码 Source