计算机并不区分二进制文件与文本文件。所有的文件都是以二进制形式来存储的,因此,从本质上说,所有的文件都是二进制文件。所以字符流是建立在字节流之上的,它能够提供字符层次的编码和解码。

常见的码表

ASCII:    美国标准信息交换码。用一个字节的7位可以表示。

ISO8859-1:   拉丁码表。欧洲码表,用一个字节的8位表示。

GB2312:   英文占一个字节,中文占两个字节.中国的中文编码表。

GBK:      中国的中文编码表升级,融合了更多的中文文字符号。

Unicode:  国际标准码规范,融合了多种文字。所有文字都用两个字节来表示,Java语言使用的就是unicode。

UTF-8:     万国码,推行的。是1~3个字节不等长。英文存的是1个字节,中文存的是3个字节,是为了节省空间。

字节流不适合读中文,因为字节流的单位以为1个字节,而在码表中文至少使用两个字节来表示。

字符流的体系

输入字符流:
-------| Reader 所有输入字符流的基类。 抽象类
----------| FileReader 读取文件字符串的输入字符流。
----------| BufferedReader   缓冲输入字符流  。 缓冲输入字符流出现的目的是为了提高读取文件的效率和拓展了FileReader的功能。其实该类内部也是维护了一个字符数组。

输入字符流

常用方法:

1、构造方法

FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader

FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader

FileReader(FileDescriptor fd) 在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader

2、读取方法

和字节输入流的读取方法一样,只是读的时候是按照字符来读的。

3、关闭资源的方法

和字节输入流的关闭资源一样。

代码示例:

 import java.io.File;
import java.io.FileReader;
import java.io.IOException; public class ReaderWriter {
public static void main(String[] args) throws IOException {
File file = new File("E:\\nick.txt");
FileReader fileReader = new FileReader(file);
int count = 0;
while((count = fileReader.read()) != -1){
System.out.print((char)count);
}
fileReader.close();
}
}

缓冲输入字符流

缓冲输入字符流出现的目的是为了提高读取文件的效率和拓展了FileReader的功能。其实该类内部也是维护了一个字符数组。

常用方法

1、构造方法

BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。

2、读取和关闭方法和输入字符流提供的方法一样。特有的方法:

String readLine() 读取一个文本行。

代码示例:

 public static void readFile2() throws FileNotFoundException, IOException {
File file = new File("E:\\nick.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String content = null;
while ((content = bufferedReader.readLine()) != null) {
System.out.println(content);
}
bufferedReader.close();
}

输出字符流

输出字符流
----------| Writer  所有输出字符流的基类,  抽象类。
--------------- | FileWriter 向文件输出字符数据的输出字符流。
----------------| BufferedWriter 缓冲输出字符流          缓冲输出字符流作用: 提高FileWriter的写数据效率与拓展FileWriter的功能。
BufferedWriter内部只不过是提供了一个8192长度的字符数组作为缓冲区而已,拓展了FileWriter的功能。

常用方法:

1、构造方法

FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。

FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。

FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。

FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造
FileWriter 对象。

2、写入方法:写入方法和FileOutPutStream的方法大致一样,只是写入的单位是一个字符。特有方法

void write(String str) 写入字符串

void write(String str, int off, int len) 写入字符串的某一部分。

3、关闭资源

关闭资源方法和FileOutPutStream的方法一致、

代码示例:

 public static void writeFile() throws IOException {
File file = new File("E:\\nick.txt");
FileWriter fileWriter = new FileWriter(file,true);
String string = "Nick 好聪明呀";
fileWriter.write(string);
fileWriter.close();
}

缓冲输出字符流

缓冲输出字符流作用: 提高FileWriter的写数据效率与拓展FileWriter的功能。BufferedWriter内部只不过是提供了一个8192长度的字符数组作为缓冲区而已,拓展了FileWriter的功能。

常用方法:

1、构造方法:

BufferedWriter(Writer out)  创建一个使用默认大小输出缓冲区的缓冲字符输出流。

BufferedWriter(Writer out, int sz) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流。

2、写入方法和关闭方法大致和FileWrite一样,特有的方法:

void newLine()  写入一个行分隔符。

代码示例如下:

 public static void writeFile2() throws IOException {
File file = new File("E:\\nick.txt");
FileWriter fileWriter = new FileWriter(file,true);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.newLine();
bufferedWriter.write("我是大师");
bufferedWriter.close();
}

实战

缓冲输入输出字符流用户登陆注册...

代码示例:

 public class Login {

     static Scanner scanner = new Scanner(System.in);

     public static void main(String[] args) throws IOException {
while(true){
System.out.println("请选择功能: A(注册) B(登陆)");
String option = scanner.next();
if("a".equalsIgnoreCase(option)){
//注册
reg(); }else if("b".equalsIgnoreCase(option)){
//登陆
login(); }else{
System.out.println("你的输入有误,请重新输入...");
}
}
} //登陆
public static void login() throws IOException{
System.out.println("请输入用户名:");
String userName = scanner.next();
System.out.println("请 输入密码:");
String password = scanner.next();
String info = userName+" "+ password;
//读取文件的信息,查看是否有该用户的信息存在,如果存在则登陆成功。
//建立数据的输入通道
//建立缓冲输入字符流
BufferedReader bufferedReader = new BufferedReader(new FileReader("F:\\users.txt"));
String line = null; boolean isLogin = false; // 用于记录是否登陆成功的标识, 默认是登陆失败的。
//不断的读取文件的内容
while((line = bufferedReader.readLine())!=null){
if(info.equals(line)){
isLogin = true;
break;
}
} if(isLogin){
System.out.println("欢迎"+userName+"登陆成功...");
}else{
System.out.println("不存在该用户信息,请注册!!");
} } //注册
public static void reg() throws IOException{
System.out.println("请输入用户名:");
String userName = scanner.next();
System.out.println("请 输入密码:");
String password = scanner.next();
String info = userName+" "+ password;
//把用户的注册的信息写到文件上
File file = new File("F:\\users.txt");
FileWriter fileWriter = new FileWriter(file,true);
//建立缓冲输出字符流
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
//把用户信息写出 bufferedWriter.write(info);
bufferedWriter.newLine();
//关闭资源
bufferedWriter.close(); } }

IO(二)----字符流的更多相关文章

  1. Java IO: 其他字符流(下)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...

  2. IO之字符流

    什么是字符流 对于文本文件(.txt .java .c .cpp) 使用字符流处理 注意点 读入的文件一定要存在 否则就会报FileNotFoundException 异常的处理 为了保证流资源 一定 ...

  3. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  4. [Java IO]03_字符流

    Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类.  它的定义如下: public abstra ...

  5. 文本数据IO操作--字符流

    一.Reader和Writer 1. 字符流原理 Reader是所有字符输入流的父类而Writer是所有字符输出流的父类.字符流是以字符(char)为单位读写数据的.一次处理一个unicode.字符流 ...

  6. Java IO编程——字符流与字节流

    在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...

  7. Java IO系统--字符流

    字符流:尽管字节流提供了处理任何类型输入/输出操作的足够功能,它们补鞥呢直接操作Unicode字符.字符流层次结构的顶层是Reader和Writer抽象类.类似于InputStream和OutputS ...

  8. java IO之 字符流 (字符流 = 字节流 + 编码表) 装饰器模式

    字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在 ...

  9. Java——IO类 字符流概述

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  10. Java IO(四--字符流基本使用

    在上一节,介绍了字节流的基本使用,本节介绍一下字符流的使用 Reader: public abstract class Reader implements Readable, Closeable { ...

随机推荐

  1. 学习笔记:Asp.Net MVC更新部分页面

    Asp.Net MVC 更新部分页面 设想我们有一篇文章下面的提交评论时如何只刷新评论内容部分, 方法一,利用ajax通过js代码实现. 方法二,利用Ajax.BeginForm()+部分视图实现. ...

  2. JSTL标签功能集锦

    1.<fmt:parseNumber integerOnly="true" value="2/3" /> 结果为0 功能:fmt:parseNumb ...

  3. 关于图片的PNG与JPG、JIF格式

    一:GIF(Graphics Interchange Format) 简介 GIF图形交换格式是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像. 它实际上是一种压缩文档,采用LZW压 ...

  4. 【单页应用之通信机制】view之间应该如何通信

    前言 在单页应用中,view与view之间的通信机制一直是一个重点,因为单页应用的所有操作以及状态管理全部发生在一个页面上 没有很好的组织的话很容易就乱了,就算表面上看起来没有问题,事实上会有各种隐忧 ...

  5. require的总结

    前言 我们来看原生的API吧: http://www.requirejs.org/docs/api.html#config 加载javascript文件 RequireJS采用不同的方法来加载脚本,他 ...

  6. json和jsonp的区别,ajax和jsonp的区别

    json和jsonp虽然只有一个字母的区别,但是它们之间扯不上关系. json是一种轻量级的数据交换格式. jsonp是一种跨域数据交互协议. json的优点:(1)基于纯文本传递极其简单,(2)轻量 ...

  7. 用原生javascript实现在页面动态显示时间

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>js ...

  8. iOS之ShareSDK实现分享、第三方登录等功能

    (1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三 ...

  9. 基本动画CABasicAnimation - 完成之后闪回初始状态

    基本动画CABasicAnimation 结束之后,默认闪回初始状态,那怎么解决呢? position需要设备两个属性: // MARK: - 结束后不要闪回去 anim.removedOnCompl ...

  10. Linux0.11内核--系统调用机制分析

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5570691.html ] Linux内核从启动到初始化也看了好些个源码文件了,这次看到kern ...