《四》JAVA 字符输入输出流
那么这篇博客我们讲的是字节输入输出流:Reader、Writer(下图红色长方形框内),红色椭圆框内是其典型实现(FileReader、FileWriter)
①、为什么要使用字符流?
因为使用字节流操作汉字或特殊符号语言的时候容易乱码,因为汉字不止一个字节,为了解决这个问题,建议使用字符流。
②、什么情况下使用字符流?
一般可以用记事本打开的文件,我们可以看到内容不乱码的。就是文本文件,可以使用字符流。而操作二进制文件(比如图片、音频、视频)必须使用字节流
1、字符输出流:FileWriter
1
2
3
|
public abstract class Writer extends Object implements Appendable, Closeable, Flushable |
用于写入字符流的抽象类
方法摘要:
下面我们用 字符输出流 Writer 的典型实现 FileWriter 来介绍这个类的用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
//1、创建源 File srcFile = new File( "io" +File.separator+ "a.txt" ); //2、创建字符输出流对象 Writer out = new FileWriter(srcFile); //3、具体的 IO 操作 /*** * void write(int c):向外写出一个字符 * void write(char[] buffer):向外写出多个字符 buffer * void write(char[] buffer,int off,int len):把 buffer 数组中从索引 off 开始到 len个长度的数据写出去 * void write(String str):向外写出一个字符串 */ //void write(int c):向外写出一个字符 out.write( 65 ); //将 A 写入 a.txt 文件中 //void write(char[] buffer):向外写出多个字符 buffer out.write( "Aa帅锅" .toCharArray()); //将 Aa帅锅 写入 a.txt 文件中 //void write(char[] buffer,int off,int len) out.write( "Aa帅锅" .toCharArray(), 0 , 2 ); //将 Aa 写入a.txt文件中 //void write(String str):向外写出一个字符串 out.write( "Aa帅锅" ); //将 Aa帅锅 写入 a.txt 文件中 //4、关闭流资源 /*** * 注意如果这里有一个 缓冲的概念,如果写入文件的数据没有达到缓冲的数组长度,那么数据是不会写入到文件中的 * 解决办法:手动刷新缓冲区 flush() * 或者直接调用 close() 方法,这个方法会默认刷新缓冲区 */ out.flush(); out.close(); |
2、字符输入流:Reader
1
2
3
|
public abstract class Reader extends Object implements Readable, Closeable |
用于读取字符流的抽象类。
方法摘要:
下面我们用 字符输入流 Reader 的典型实现 FileReader 来介绍这个类的用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
//1、创建源 File srcFile = new File( "io" +File.separator+ "a.txt" ); //2、创建字符输出流对象 Reader in = new FileReader(srcFile); //3、具体的 IO 操作 /*** * int read():每次读取一个字符,读到最后返回 -1 * int read(char[] buffer):将字符读进字符数组,返回结果为读取的字符数 * int read(char[] buffer,int off,int len):将读取的字符存储进字符数组 buffer,返回结果为读取的字符数,从索引 off 开始,长度为 len * */ //int read():每次读取一个字符,读到最后返回 -1 int len = - 1 ; //定义当前读取字符的数量 while ((len = in.read())!=- 1 ){ //打印 a.txt 文件中所有内容 System.out.print(( char )len); } //int read(char[] buffer):将字符读进字符数组 char [] buffer = new char [ 10 ]; //每次读取 10 个字符 while ((len=in.read(buffer))!=- 1 ){ System.out.println( new String(buffer, 0 ,len)); } //int read(char[] buffer,int off,int len) while ((len=in.read(buffer, 0 , 10 ))!=- 1 ){ System.out.println( new String(buffer, 0 ,len)); } //4、关闭流资源 in.close(); |
3、用字符流完成文件的复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/** * 将 a.txt 文件 复制到 b.txt 中 */ //1、创建源和目标 File srcFile = new File( "io" +File.separator+ "a.txt" ); File descFile = new File( "io" +File.separator+ "b.txt" ); //2、创建字符输入输出流对象 Reader in = new FileReader(srcFile); Writer out = new FileWriter(descFile); //3、读取和写入操作 char [] buffer = new char [ 10 ]; //创建一个容量为 10 的字符数组,存储已经读取的数据 int len = - 1 ; //表示已经读取了多少个字节,如果是 -1,表示已经读取到文件的末尾 while ((len=in.read(buffer))!=- 1 ){ out.write(buffer, 0 , len); } //4、关闭流资源 out.close(); in.close(); |
《四》JAVA 字符输入输出流的更多相关文章
- Java IO详解(四)------字符输入输出流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- Java中的字节输入出流和字符输入输出流
Java中的字节输入出流和字符输入输出流 以下哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...
- 深入理解Java输入输出流
Java.io包的File类,File类用于目录和文件的创建.删除.遍历等操作,但不能用于文件的读写. Java 对文件的写入和读取涉及到流的概念,写入为输出流,读取为输入流.如何理解流的概念呢?可以 ...
- Java输入输出流(一)——常用的输入输出流
1.流的概念:在Java中,流是从源到目的地的字节的有序序列.Java中有两种基本的流--输入流(InputStream)和输出流(OutputStream). 根据流相对于程序的另一个端点的不同,分 ...
- Java输入/输出流体系
在用java的io流读写文件时,总是被它的各种流能得很混乱,有40多个类,理清啦,过一段时间又混乱啦,决定整理一下!以防再忘 Java输入/输出流体系 1.字节流和字符流 字节流:按字节读取.字符流: ...
- java基础---->java输入输出流
今天我们总结一下java中关于输入流和输出流的知识,博客的代码选自Thinking in java一书.我突然很想忘了你,就像从未遇见你. java中的输入流 huhx.txt文件的内容如下: I l ...
- Java精选笔记_IO流(字符输入输出流、字符文件输入输出流、字符流的缓冲区)
字符流 Reader是字符输入流的基类,用于从某个源设备读取字符 Writer是字符输出流,用于向某个目标设备写入字符 字符流操作文件 字符输入流FileReader,通过此流可以从关联的文件中读取一 ...
- Java基础 FileReader-FileWriter / 缓冲字符输入输出流 / 缓冲字节输入输出流 三种方式 进行文本文件的复制
易错的地方: /** 出错的地方: * 1.缓冲流儿输出时,务必:flush();不然可能输出不尽! * 2. bw缓冲字符输出流,记得这里! bw.write(b,0,len); * 3.字符流不能 ...
- java中字符输入输出流在输出结果的结尾多一个乱码字符:'?'
原因以及解决方法: 核心方法如下: public static void main(String[] args) throws Exception{ // TODO Auto-generated me ...
随机推荐
- Perl Learning 5 Hash
[本文原创,未经同意请勿转载] 哈希是一种数据结构,它和数组的相似之处在于能够容纳随意多的值并能按需取用,而它和数组的不同在于索引方式,数组是以数字来索引.哈希则以名字来索引.也就是说.哈希的索引值, ...
- Ionic2集成ArcGIS JavaScript API.md
1. Ionic同原生ArcGIS JavaScript API结合 1.1. 安装esri-loader 在工程目录下命令行安装: npm install angular2-esri-loader ...
- sql 通过某段时间求得改段时间内的工作时长,排除工作日
CREATE FUNCTION Fun_GetTotalHourBySomeTime(@TaskId NVARCHAR(30),@Bu_trupstartDate NVARCHAR(50),@Bu_t ...
- XT800 在域环境在运行设置
测试时先将防火墙关了,不然无法远程,找个问题后再打开防火墙 0. 防火墙中建立规则,允许XT800通过. 1.在客户端当前用户下运行XT800安装程序 2.输入管理员账号及密码 3.安装时选择D或E盘 ...
- JAVA 获取访问者IP
* 获取访问者IP * * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效. * * 本方法先从Header中获取X-Real- ...
- python + eclipse + django + postgresql 开发网站(二)
引用与参考 http://www.cnblogs.com/lanxuezaipiao/p/3283932.html python2.7 django1.6 1.新建Django项目
- HDU——T 3072 Intelligence System
http://acm.hdu.edu.cn/showproblem.php?pid=3072 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- 多个ComboBox绑定同一个数据源出现的问题解决办法
出现问题: 当多个ComboBox绑定同一个数据源后,只要更改其中一个的选择项时,其它的ComboBox也跟着改变了 解决办法: DataTable dt = new DataTable(); dt ...
- Intersection between 2d conic in OpenCASCADE
Intersection between 2d conic in OpenCASCADE eryar@163.com Abstract. OpenCASCADE provides the algori ...
- colorscheme-如何vim颜色风格
我们vim默认的风格是黑底的,如果我们想要更换其他的风格,比如字体高亮的颜色.注释的颜色等.这时候我们就需要一个属性了,如下 colorscheme darkblue 这个属性的值,其实是在 /usr ...