java之IO流详解(二)
好了,昨天讲了字节流,现在我们就来讲字符流吧。。。
字符流可以这样理解,字符流 = 字节流 + 编码表,目的是为了更好的操作中文字符(注:字符流只可以可以操作字符类型的文件,不能操作影音图像文件,要操作这些文件必须使用字节流)
我们先看看字符流有几类:
A:OutputStreamWriter (父类Writer)
OutputStreamWriter(OutputStream os):默认编码,GBK
OutputStreamWriter(OutputStream os,String charsetName):指定编码。
B:InputStreamReader (父类Reader)
InputStreamReader(InputStream is):默认编码,GBK
InputStreamReader(InputStream is,String charsetName):指定编码
注:编码问题只要输入和输出流的编码一致即可。
C:FileWriter (父类OutputStreamWriter)
FileWriter(File file)
FileWriter(String fileName)
FileWriter(File file,
boolean append)
用来写入字符文件的便捷类 ,通常我们操作字符流采取这个类即可,因为它是继承自OutputStreamWriter的类,方法和父类的一样,而且构造方法比较简便,当然使用上面的OutputStreamWriter(OutputStream
os)也行,参数是一个字节流对象。
D:FileReader (父类InputStreamReader)
用来读取字符文件的便捷类
E:BufferedWriter (父类Writer)
BufferedWriter(Writer out)
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
F:BufferedReader (父类Reader)
BufferedReader(Reader in)
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
注:为了获得最高效率,可考虑将 OutputStreamWriter或FileWriter 包装到 BufferedWriter
中,将 OutputStreamReader或FileReader 包装到 BufferedReader 中。
下面我们通过代码来具体看看字符流怎么使用:
1、OutputStreamWriter和InputStreamReader
public static void OutputStreamWriter() throws IOException{
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c.txt"));
char[] ch = new char[]{'a','b','c','d','e'};
osw.write(ch);//字符数组形式写入
osw.write(ch, 0, 3);//字符数组一部分写入
osw.write("你好吗");//字符串形式写入
osw.flush();//刷新,将缓冲区的数据写入到文件中
osw.close();
InputStreamReader isr = new InputStreamReader(new FileInputStream("c.txt"));
char[] ch2 = new char[1024];
int len = -1;
while((len = isr.read(ch2))!=-1){//一次读1024个字符
System.out.print(new String(ch2,0,len));//将读取到的字符转化为字符串显示出来
}
isr.close();
}
结果为:abcdeabc你好吗
2、FileWriter 和FileReader
public static void FileWriterDemo() throws IOException{
FileReader fr = new FileReader("a.txt");//创建一个读取字符流对象,并指向a.txt这个文件
FileWriter fw = new FileWriter("b.txt");
char[] ch = new char[1024];
int len = -1;
while((len=fr.read(ch))!=-1){//一次读1024个字符
fw.write(ch, 0, len);//将读到多少数据写入缓冲区中
fw.flush();//刷新缓冲区把数据写入文件中
}
fw.close();
fr.close();
}
3、最高效的BufferedWriter 和BufferedReader,缓冲字符流
- 普通方式:
public static void Bufferwriter() throws IOException{
//BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
BufferedReader br = new BufferedReader(new FileReader("a.txt"));//包装字符流
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));//包装字符流
int len = -1;
char[] cbuf = new char[1024];
while((len=br.read(cbuf))!=-1){
bw.write(cbuf, 0, len);//将读到多少数据写入缓冲区中
bw.flush();//刷新缓冲区把数据写入文件中
}
bw.close();
br.close();
}
BufferedReader特有方式,一次读取一行的数据,即读一行字符串:
public static void BufferDemo() throws IOException{
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
String line = null;
while((line=br.readLine())!=null){//br.readLine()返回值是一个字符串,因为它是一次读取一行字符串数据。当它返回值为null时,表示读取完毕
bw.write(line);//写入刚刚读取到的字符串到缓冲区
bw.newLine();//换行
bw.flush();//将缓冲区的字符串写入文件中,如果不刷新,那么就没有数据写入
}
bw.close();//将写入流关闭时会默认刷新一遍缓冲区,建议在每写一遍数据时候调用flush()刷新一遍
br.close();
}
ok,字符流就讲完了。
java之IO流详解(二)的更多相关文章
- Java io流详解二
原文地址https://www.cnblogs.com/xll1025/p/6418766.html 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间 ...
- Java之IO流详解
IO流 Input/Output 完成输入/输出 应用程序运行时——数据在内存中 ←→ 把数据写入硬盘(磁带) 内存中的数据不可持久保存的 输入:从外部存储器(硬盘.磁带.U盘)把数据读入内存. ...
- JAVA中IO流详解
IO流:数据传输是需要通道的,而IO流就是数据传输的通道. IO流可以形象的比喻为运送货物的传输带. IO流的分类: ①根据操作的数据类型的不同可以分为 :字节流与字符流. ②根据数据的流向分为:输入 ...
- java之IO流详解(一)
IO流的分类: A:流向 输入流 读取数据 输出流 写出数据 B:数据类型 字节流 字节输入流 InputStream 字节输出流 OutputStream 字符流 字符输入流 Reader 字 ...
- 基于JavaSE阶段的IO流详解
1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...
- Java IO流详解(二)——File类
在上一章博客中简单的介绍了Java IO流的一些特征.也就是对文件的输入输出,既然至始至终都离不开文件,所以Java IO流的使用得从File这个类讲起. File类的描述:File类是文件和目录路径 ...
- Java io流详解四
转载地址:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html 写在前面:本文章基本覆盖了java IO的全部内容,jav ...
- Java io流详解一
原文地址http://www.cnblogs.com/xdp-gacl/p/3634409.html java基础学习总结——流 一.JAVA流式输入/输出原理
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
随机推荐
- TopCoder SRM 566 Div 1 - Problem 1000 FencingPenguins
传送门:https://284914869.github.io/AEoj/566.html 题目简述: 平面上有中心在原点,一个点在(r,0)处的正n边形的n个顶点.平面上还有m个企鹅,每个企鹅有一个 ...
- 【Codeforces Round #431 (Div. 1) D.Shake It!】
·最小割和组合数放在了一起,产生了这道题目. 英文题,述大意: 一张初始化为仅有一个起点0,一个终点1和一条边的图.输入n,m表示n次操作(1<=n,m<=50),每次操作是任选一 ...
- FJOI2017 RP++
嗯如果算得没错大概十二小时之后就是省选二试了 这次考试貌似就在我们学校 虽然机子挺旧的基本没用过 平时训练都是在专门的机房 其实貌似压力不是很大 因为一试跪了TAT 那时候还是图样 T3按照惯例是 ...
- 使用C# (.NET Core) 实现状态设计模式 (State Pattern)
本文的概念性内容来自深入浅出设计模式一书 项目需求 这是一个糖果机的需求图. 它有四种状态, 分别是图中的四个圆圈: No Quarter: 无硬币 Has Quater 有硬币 Gumball So ...
- 缓冲区(buffer)与缓存(cache)
下面介绍缓冲区的知识. 一.什么是缓冲区 缓冲区(buffer),它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区, ...
- Spring MVC页面重定向
以下示例显示如何编写一个简单的基于Web的重定向应用程序,这个应用程序使用重定向将http请求传输到另一个页面. 基于Spring MVC - Hello World实例章节中代码,创建创建一个名称为 ...
- Python中模块之os的功能介绍
Python中模块之os的功能介绍 1. os的变量 path 模块路径 方法:os.path 返回值:module 例如:print(os.path) >>> <module ...
- PSR-4 自动加载器
div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,cod ...
- laravel实现支付宝支付功能
起因 前段时间因为项目中需要实现支付宝手机网站支付功能,所以写下这篇文章以作记录,不足之处,欢迎指教. 后端框架:Laravel 5.5 业务功能 适用于商家在移动端网页应用中集成支付宝支付功能.商家 ...
- Linux服务器之间免密登录设置
说明: A为linux服务器a B为linux服务器b 每台linux都有ssh的服务端和客户端,linux下的ssh命令就是一个客户端 我们常用ssh协议来进行登陆或者是文件的拷贝,都需要密码 A要 ...