【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 ...
随机推荐
- 在Visual Studio 2019中使用scanf报错C4996解决办法
错误警告信息 错误C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To ...
- python基础中遇到的问题(TypeError: unhashable type: 'list')
d20220330 #false >>> l=[{i:i+1} for i in [1,2,3]] >>> l [{1: 2}, {2: 3}, {3: 4}] & ...
- JavaScript 语言入门
目录 JavaScript 介绍 JavaScript 和 和 html 代码的结合方式 第一种方式 第二种方式 4.变量 关系(比较)运算 逻辑运算 数组(重点) 函数(重点) 函数的二种定义方式 ...
- SAP BPC 清除CUBE 中的数据
原理:先根据模型和查询条件取出数据,然后把金额设置为0,再写回CUBE. 1.获取数据并清空金额 *&--------------------------------------------- ...
- python爬虫之protobuf协议介绍
前言 在你学习爬虫的知识过程中是否遇到下面的类型.如果有兴趣学习一下或者了解相关知识的,且不嫌在下才疏学浅,可以参考一下.欢迎各位网友的指正. 首先叙述一下问题的会出现的式样. 你可能会在请求参数中看 ...
- Python实现循环的最快方式,for和while到底谁更强
写在前面的一些P话: 大家都知道,效率不管是对于工作还是学习都是十分重要的.当然,Python也是需要效率的.众所周知,Python 不是一种执行效率较高的语言.此外在任何语言中,循环都是一种非常消耗 ...
- Java 内存模型,或许应该这么理解
大家好,我是树哥. 在前面一段时间,我连续写了几篇关于并发编程的文章: 从 CPU 讲起,深入理解 Java 内存模型! - 陈树义的博客 深入理解 happens-before 原则 - 陈树义的博 ...
- DNS 系列(一):为什么更新了 DNS 记录不生效?
我们在上网时如果想要访问到另一台机器上的内容,通常只需要直接输入一串地址,例如:www.upyun.com,就能够准确访问到自己想要访问的网站.但是实际上这只是方便我们记忆的字符形式网络标识,真正让我 ...
- npm运行出错npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree
npm运行出错npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree 场景复现: 使用vue CLI创建项 ...
- Conversation Modeling on Reddit Using a Graph-Structured LSTM
publish: Transactions of the Association for Computational Linguistics,2016 tasks: predicting popul ...