第一种 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-六种字符流使用实例的更多相关文章

  1. Java学习笔记38(字符流)

    字符输出流:Writer类:使用时候需要它的子类 局限性:只能写文本文件,无法写其他文件 方法: package demo; import java.io.FileWriter; import jav ...

  2. Java学习笔记42(序列化流)

    对象中的数据,以流的形式,写入到文件中保存 过程称为写出对象,对象的序列化 ObjectOutputStream将对象写到文件中,实现序列化 在文件中,以流的形式,将对象读取出来, 读取对象,对象的反 ...

  3. Java学习路径及练手项目合集

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 实验楼上的[Java 学习路径]中将首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE ...

  4. JAVA中的字节流与字符流

    字节流与字符流的区别? 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用 ...

  5. Java学习路径(抛光砖)

    这就是我刚刚在五孔问答中找到的Java学习路线图抛光砖价格.我个人认为,这条Java学习路线是可以的.它是2018年相对较新的Java学习路线,更符合企业就业标准. Java学习路径的第一阶段:Jav ...

  6. java的IO学习,字节流与字符流的编码讲解

    字节流与字符流 字节流可以处理所有类型的数据(图片.视频等),在java中对应的类都为“stream”结尾 1字节=8位二进制=具体存储空间   字符流仅能处理纯文本的数据,在java中对应的类都是以 ...

  7. Java第三阶段学习(三、字符流、转换流)

    一.字节流读取中文时出现的问题: 文件中有中文时,用字节流读取会出现乱码的问题,因为一个中文为两个字节. 二.字符编码表 编码表:其实就是生活中字符和计算机二进制的对应关系表. 1.ascii: 一个 ...

  8. java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr

    BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...

  9. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

随机推荐

  1. 在Visual Studio 2019中使用scanf报错C4996解决办法

    错误警告信息 错误C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To ...

  2. python基础中遇到的问题(TypeError: unhashable type: 'list')

    d20220330 #false >>> l=[{i:i+1} for i in [1,2,3]] >>> l [{1: 2}, {2: 3}, {3: 4}] & ...

  3. JavaScript 语言入门

    目录 JavaScript 介绍 JavaScript 和 和 html 代码的结合方式 第一种方式 第二种方式 4.变量 关系(比较)运算 逻辑运算 数组(重点) 函数(重点) 函数的二种定义方式 ...

  4. SAP BPC 清除CUBE 中的数据

    原理:先根据模型和查询条件取出数据,然后把金额设置为0,再写回CUBE. 1.获取数据并清空金额 *&--------------------------------------------- ...

  5. python爬虫之protobuf协议介绍

    前言 在你学习爬虫的知识过程中是否遇到下面的类型.如果有兴趣学习一下或者了解相关知识的,且不嫌在下才疏学浅,可以参考一下.欢迎各位网友的指正. 首先叙述一下问题的会出现的式样. 你可能会在请求参数中看 ...

  6. Python实现循环的最快方式,for和while到底谁更强

    写在前面的一些P话: 大家都知道,效率不管是对于工作还是学习都是十分重要的.当然,Python也是需要效率的.众所周知,Python 不是一种执行效率较高的语言.此外在任何语言中,循环都是一种非常消耗 ...

  7. Java 内存模型,或许应该这么理解

    大家好,我是树哥. 在前面一段时间,我连续写了几篇关于并发编程的文章: 从 CPU 讲起,深入理解 Java 内存模型! - 陈树义的博客 深入理解 happens-before 原则 - 陈树义的博 ...

  8. DNS 系列(一):为什么更新了 DNS 记录不生效?

    我们在上网时如果想要访问到另一台机器上的内容,通常只需要直接输入一串地址,例如:www.upyun.com,就能够准确访问到自己想要访问的网站.但是实际上这只是方便我们记忆的字符形式网络标识,真正让我 ...

  9. 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创建项 ...

  10. Conversation Modeling on Reddit Using a Graph-Structured LSTM

    publish: Transactions of the Association for Computational Linguistics,2016 tasks:  predicting popul ...