第一种 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. Arraylist集合、对象数组

    Arraylist集合 ArrayList是List接口的一个实现类,它是程序中最常见的一种集合. 他的特点:在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量的增删操作,Ar ...

  2. SAP LUW 实现提交数据库更新

    CALL FUNCTION 'TRANSACTION_BEGIN' IMPORTING transaction_id = lv_transaction_id. * 更新日志表 MODIFY zfit0 ...

  3. ABAP CDS DDHEADANNO

  4. 你真的会python中的for循环吗

    for 循环是 Python 中的通用序列迭代器:它可以单步遍历任何有序序列中的元素.for 语句适用于字符串.列表.元组.其他内置可迭代对象和类创建的新对象. for 通常比 while 循环更容易 ...

  5. NC53681 「土」巨石滚滚

    NC53681 「土」巨石滚滚 题目 题目描述 帕秋莉掌握了一种土属性魔法 她使用这种魔法建造了一个大型的土球,并让其一路向下去冲撞障碍 土球有一个稳定性 \(x\) ,如果 \(x < 0\) ...

  6. Java服务假死后续之内存溢出

    一.现象分析 上篇博客说到,Java服务假死的原因是使用了Guava缓存,30分钟的有效期导致Full GC无法回收内存.经过优化后,已经不再使用Guava缓存,实时查询数据.从短期效果来看,确实解决 ...

  7. 减省 Java 小半内存,Solon v1.9.2 发布

    相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 - 10 倍. (更快) qps 高 2- 3 倍. (更高) 运行时内存节省 1/3 ~ 1/2. (更少) 打包 ...

  8. MLX90640 红外热成像仪测温模块简要介绍说明

    MLX90640 红外热成像仪测温模块简要介绍说明 (1) A 型和 B 型的区别 区别主要有以下几点 视场角不同: A 型为 110*75° , B 型为 55*35° ,通俗一点讲就是 A 型是广 ...

  9. Hadoop集群搭建(完全分布式版本) VMWARE虚拟机

    Hadoop集群搭建(完全分布式版本) VMWARE虚拟机 一.准备工作 三台虚拟机:master.node1.node2 时间同步 ntpdate ntp.aliyun.com 调整时区 cp /u ...

  10. SpringBoot集成文件 - 集成POI之Excel导入导出

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...