【java】学习路径42-六种字符流使用实例
第一种 OutputStreamWriter OutputStreamReader
第二种 FileWriter FileReader
第三种 BufferedWriter BufferedReader
共六种字符流,
一般方便使用中间两种。
如需设置缓冲流大小,则使用第三种。
如需设定字符流的编码,则使用第一种。
层级关系(Write举例):FileWriter extends InputStreamWriter extends Writer
BufferedWriter extends Writer
特别说明:
1、OutputStreamWriter和OutputStreamReader其实也有内置缓冲流,只不过不能自行设置。
2、FileWriter和FileReader本质上是OutputStreamWriter和OutputStreamReader,相当于语法糖。
3、如果要设置OutputStreamWriter和OutputStreamReader的缓冲区大小,我们使用BufferedWriter和BufferedReader。
4、BufferedWriter和BufferedReader可以设置缓冲区大小
1-OutputStreamWriter
使用该方法构造OutputStreamWriter&InputStreamReader时,需要再手动构造一个FileOutputStream&FileInputStream,比较麻烦
也可以在调用完write方法之后添加如下代码:
outputStreamWriter.flush();
养成良好的编程习惯。
@Test//写到硬盘 OutputStreamWriter
public void testOutputStreamWriter(){
OutputStreamWriter outputStreamWriter=null;
try {
FileOutputStream fileOutputStream = new FileOutputStream("字符流输出.txt");
//可以指定默认编码,GBK,UTF-8,
outputStreamWriter = new OutputStreamWriter(fileOutputStream,"GBK");
outputStreamWriter.write('中');
outputStreamWriter.write("你好");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outputStreamWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2-InputStreamReader
@Test//从硬盘读取 InputStreamReader
public void testInputStreamReader(){
InputStreamReader inputStreamReader = null;
try {
FileInputStream fileInputStream = new FileInputStream("字符流输出.txt");
//第二个参数 可以指定读取的编码
inputStreamReader = new InputStreamReader(fileInputStream,"GBK");
char[] data = new char[1024];
int length = -1;
while((length=inputStreamReader.read(data))>=0)
System.out.print(new String(data,0,length));
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
inputStreamReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3-FileWriter
下面这两种没有办法指定编码格式。
@Test//写进硬盘
public void testFileWriter(){
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter("字符流输出.txt");
fileWriter.write("我使用了FileWriter直接写出字符流,非常方便\n");
fileWriter.write("不需要像OutputStreamWriter那样\n");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4-FileReader
@Test//从硬盘读取
public void testFileRead(){
FileReader fileReader = null;
try {
fileReader = new FileReader("字符流输出.txt");
char[] chars = new char[1024];
int length = -1;
while((length=fileReader.read(chars))>=0)
System.out.print(new String(chars,0,length));
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5-BufferedWriter
可以自定缓冲区大小
@Test
public void testBufferedWriter(int bufferedSize){
BufferedWriter bufferedWriter =null;//定义BufferedWriter
try {
//构造一个FileWriter,传给BufferedWriter
FileWriter fileWriter = new FileWriter("字符流输出.txt");
//构造BufferedWriter,传入Write类和int类
bufferedWriter = new BufferedWriter(fileWriter,bufferedSize);
bufferedWriter.write('你');
bufferedWriter.write("好吖");
bufferedWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
6-BufferedReader
@Test
public void testBufferedReader(){
BufferedReader bufferedReader = null;
FileReader fileReader = null;
try {
fileReader = new FileReader("字符流输出.txt");
bufferedReader = new BufferedReader(fileReader);
//读取单个
System.out.println((char)bufferedReader.read());
//读取一整行
System.out.println(bufferedReader.readLine());
//剩下的全部
char[] data = new char[1024];
int length = -1;
while((length=bufferedReader.read(data))>=0)
System.out.println(new String(data,0,length));
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
【java】学习路径42-六种字符流使用实例的更多相关文章
- Java学习笔记38(字符流)
字符输出流:Writer类:使用时候需要它的子类 局限性:只能写文本文件,无法写其他文件 方法: package demo; import java.io.FileWriter; import jav ...
- Java学习笔记42(序列化流)
对象中的数据,以流的形式,写入到文件中保存 过程称为写出对象,对象的序列化 ObjectOutputStream将对象写到文件中,实现序列化 在文件中,以流的形式,将对象读取出来, 读取对象,对象的反 ...
- Java学习路径及练手项目合集
Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 实验楼上的[Java 学习路径]中将首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE ...
- JAVA中的字节流与字符流
字节流与字符流的区别? 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用 ...
- Java学习路径(抛光砖)
这就是我刚刚在五孔问答中找到的Java学习路线图抛光砖价格.我个人认为,这条Java学习路线是可以的.它是2018年相对较新的Java学习路线,更符合企业就业标准. Java学习路径的第一阶段:Jav ...
- java的IO学习,字节流与字符流的编码讲解
字节流与字符流 字节流可以处理所有类型的数据(图片.视频等),在java中对应的类都为“stream”结尾 1字节=8位二进制=具体存储空间 字符流仅能处理纯文本的数据,在java中对应的类都是以 ...
- Java第三阶段学习(三、字符流、转换流)
一.字节流读取中文时出现的问题: 文件中有中文时,用字节流读取会出现乱码的问题,因为一个中文为两个字节. 二.字符编码表 编码表:其实就是生活中字符和计算机二进制的对应关系表. 1.ascii: 一个 ...
- java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr
BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
随机推荐
- Arraylist集合、对象数组
Arraylist集合 ArrayList是List接口的一个实现类,它是程序中最常见的一种集合. 他的特点:在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量的增删操作,Ar ...
- 【RPA之家转载RPA创新产业峰会回看】机器人流程自动化专利态势报告
[RPA之家转载RPA创新产业峰会回看]机器人流程自动化专利态势报告 自动化的一个专利情况的监测,就是全球监测的情况.今天我可能给大家汇报的主要是三个方面,第一个方面就是讲一下全球投资智能化的专利的一 ...
- Linux文件的通配符
通配符的作用:匹配文件名 常见的通配符: *:表示任意个字符(不包括隐藏文件) ?:单个任意字符(中文也算一个字符) []:表示匹配一范围或者其中一个 表示匹配范围: [a-z] --- 不但包括了小 ...
- 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾
「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 目录 「BUAA OO Unit 4 HW16」第四单元总结与课程回顾 Part 0 第四单元作业架构设计 架构设计概要 AppRun ...
- Python自动化办公:27行代码实现将多个Excel表格内容批量汇总合并到一个表格
序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 老板最近越来越过分了,快下班了发给我几百个表格让我把内容合并到一个表格内去.还好我会Python,分分钟 ...
- 零基础学Python:元组(Tuple)详细教程
Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可https://jq.qq.com/?_wv=1 ...
- mysql密码忘记了重置方法
#先把mysql停止 service mysqld stop #安全模式进入mysql,并且跳过授权表 mysqld_safe --skip-grant-tables & #如果上面这个命令报 ...
- NC23053 月月查华华的手机
NC23053 月月查华华的手机 题目 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇心,打开了华华的手机.哇,她看到了一片的QQ推荐好友,似乎华华还 ...
- FFT 学习笔记(自认为详细)
引入 什么是 \(\text{FFT}\) ? 反正我看到 \(\text{wiki}\) 上是一堆奇怪的东西. 快速傅里叶变换(英语:Fast Fourier Transform, FFT),是快速 ...
- Gitlab分支策略建议指南
本文分支策略为总结各中小型企业常见做法(仅代表个人观点),在下才疏学浅,文章如有缺漏或不当之处,望各位帮忙指正.写此文也十分希望能起抛砖引玉之效. 据我所知,目前大部分无论是按瀑布/敏捷开发模型,就算 ...