《四》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 ...
随机推荐
- JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
本文原创,转载请注明出处:http://blog.csdn.NET/qinjuning 在掌握了JNI函数的使用和相关类型的映射后,以及知晓何利用javah工具生成对应的jni函数以及如何生成动态 链 ...
- 2.cocos设置背景图片
在bool HelloWorld::init()中加入如下代码 auto bg = Sprite::create("1.jpg"); if (bg) { bg->setPos ...
- Xamarin大佬的地址
https://www.cnblogs.com/hlx-blogs/p/7266098.html http://www.cnblogs.com/GuZhenYin/p/6971069.html
- codeforces 710C Magic Odd Square(构造或者n阶幻方)
Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, column and both ma ...
- JWT 使用介绍
转载收藏于 http://www.cnblogs.com/zjutzz/p/5790180.html JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为: A.B.C A由JW ...
- c# 读取 excel文件内容,写入txt文档
1 winform 读取excel文档 1)点击button按钮,弹出上传excel窗口 private void button_headcompany_Click(object sender, Ev ...
- Flex之登录界面
制作登录框界面 环境搭建:MyEclipse 6.5+Flex Builder 3 Plug-in <?xml version="1.0" encoding="ut ...
- python之路:发附带文件的邮件
发邮件的思路(借用第三方服务): 1.模拟服务器,其中有:服务器地址,发送者地址.发送者的密码 2.创建一个带附件的实例:1.创建一个massage 2.massage包括发送者的地址.接受者的地址. ...
- Mysql学习总结(2)——Mysql超详细Window安装教程
目录 一.安装包准备 二.开始安装 三.验证安装 四.客户端工具 一.安装包准备 1.下载MySql5.6 http://www.mysql.com/ 下载如下教程,这时要选MySql On Wind ...
- androidclient和站点数据交互的实现(基于Http协议获取数据方法)
androidclient一般不直接訪问站点数据库,而是像浏览器一样发送get或者post请求.然后站点返回client能理解的数据格式,client解析这些数据.显示在界面上.经常使用的数据格式是x ...