一、字符输入流

  java.io.Reader 抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。

  它定义了字符输入流的基本共性功能方法。

public int read() : 从输入流读取一个字符。作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff)(2个字节的Unicode码),如果已到达流的末尾,则返回 -1
public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。
int read(char[] cbuf, int off, int len) :读取多个字符,读取的字符放到cbuf数组中,从cbuf的[off]开始存储,最多读取len个实际本次读取的字符的个数
public void close() :关闭此流并释放与此流相关联的任何系统资源。

  注意:上面的 read() 方法,如果流中没有数据可读,统统返回 -1。

  Reader 抽象类的子类结构

  

  注意:深色的为节点流,浅色的为处理流。

二、FileReader 类

  java.io.FileReader 类是读取字符文件的子类。构造时使用系统默认的字符编码和默认字符缓冲区。

   java.io.FileReader extends InputStreamReader extends Reader  继承关系。

  Tips

    ① 字符编码:字节与字符的对应规则,windows 系统的中文编码默认是GBK编码表,或者为 UTF-8.

    ② 字符缓冲区:一个字节数组,用来临时存储字节数据。

  1、构造方法

FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象。
FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称。

    参数:读取文件的数据源。

      String fileName:文件的路径

      File file:文件对象

    构造方法的作用

      ① 创建一个 FileReader 对象

      ② 会把 FileReader 对象指向要读取的文件

    字符输入流的使用步骤

      ① 创建 FileReader 对象,构造方法中绑定要读取的数据源(选择IO流,创建IO对象)。

      ② 使用 FileReader 对象中的方法 read 读取文件(读/写操作)。

      ③ 释放资源(关闭IO流)。

  2、读取字符数据

    (1)读取字符:read 方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回 -1 ,循环读取,代码使用演示:

 public static void main(String[] args) throws IOException {
//1.创建FileReader对象,构造方法中绑定要读取的数据源
FileReader fr = new FileReader("E:\\c.txt");
//2.使用FileReader对象中的方法read读取文件
//int read() 读取单个字符并返回。
int len = 0;
while((len = fr.read())!=-1){
System.out.print((char)len);
} //3.释放资源
fr.close();
}

    (2)使用字符数组读取:read(char[] cbuf) ,每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回 -1 ,代码使用演示:

  public static void main(String[] args) throws IOException {
//1.创建FileReader对象,构造方法中绑定要读取的数据源
FileReader fr = new FileReader("E:\\c.txt");
//2.使用FileReader对象中的方法read读取文件 //int read(char[] cbuf)一次读取多个字符,将字符读入数组。
char[] cs = new char[1024];//存储读取到的多个字符
int len = 0;//记录的是每次读取的有效字符个数
while((len = fr.read(cs))!=-1){
/*
String类的构造方法
String(char[] value) 把字符数组转换为字符串
String(char[] value, int offset, int count) 把字符数组的一部分转换为字符串 offset数组的开始索引 count转换的个数
*/
System.out.println(new String(cs,0,len));
} //3.释放资源
fr.close();
}

Java 之 字符输入流[Reader]的更多相关文章

  1. 字符输入流Reader简要概括

    字符输入流Reader组成结构 本篇将对JAVA I/O流中的字符输入流Reader做个简单的概括: 总得来说,每个字符输入流类都有一个对应的用途,如下: 字符流基类:Reader 字节流转字符流:I ...

  2. [19/03/31-星期日] IO技术_四大抽象类_字符流( 字符输入流 Reader、 字符输出流 Writer )(含字符缓冲类)

     一.概念 Reader Reader用于读取的字符流抽象类,数据单位为字符. int read(): 读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值,即Unicode ...

  3. 00091_字符输入流Reader

    1.字符输入流Reader (1)字符输入流Reader我们读取拥有中文的文件时,使用的字节流在读取,那么我们读取到的都是一个一个字节: (2)只要把这些字节去查阅对应的编码表,就能够得到与之对应的字 ...

  4. 字符输入流Reader类和FileReader和字符输入流读取字符数据

    java.io.Reader:字符输入流,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类 共性成员方法: int read();读取单个字符并返回 int read(char[] ...

  5. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  6. Java IO流详解(四)——字符流Reader和Writer

    前面一章介绍了字节流的使用,提到了字节流在处理utf-8编码的中文可能会出现乱码的情况(其他编码的中文同样会出现乱码),所以Java针对这一情况提供了字符流. 但是字符流只能处理字符,不能用来处理 . ...

  7. java 字节→字符转换流

    OutputStreamWriter:把字节输出流对象转成字符输出流对象 InputStreamReader:把字节输入流对象转成字符输入流对象 FileWriter和FileReader分别是Out ...

  8. Java读写文件,字符输入流FileReader 和 字符输出流FileWriter

    一个流被定义为一个数据序列.输入流用于从源文件读取数据,输出流用于向目标写数据. 字符输入流FileReader三种读文件方式 package com.shuzf.fileio; import jav ...

  9. Java中的流(3)字符流-Reader和Writer

    java中提供了处理以16位的Unicode码表示的字符流的类,即以Reader和Writer 为基类派生出的一系列类.  1.Reader和Writer  这两个类是抽象类,只是提供了一系列用于字符 ...

随机推荐

  1. consul_nginx_uprsync动态负载均衡

    consul_nginx_uprsync动态负载均衡 环境准备: 原理描述: 将Nginx的负载均衡后端服务器配置信息写入consul的接口中,upsync插件通过读取consul的配置,然后持久化到 ...

  2. 【转载】 tf.split函数的用法

    原文地址: https://blog.csdn.net/uestc_c2_403/article/details/73350457 由于tensorflow 版本更新问题   用法略有修改 ----- ...

  3. ES6深入浅出-9 Promise-1.回调与回调地狱

    promise 回调 把fun的调用写在另外一个函数里 fun()的调用在fn2这个函数里面.也是调用了函数.这种函数的调用形式叫做回调. A打电话给C找B.但是B不在,C说等B在的时候让B给A回电话 ...

  4. yii2 api接口 实现国际化多语言设置

    1) 在 /config/main.php 下添加如下代码: 'components' => [ 'language' => 'zh-CN', 'i18n' => [ 'transl ...

  5. c# Invoke的新用法

    在C# 3.0及以后的版本中有了Lamda表达式,像上面这种匿名委托有了更简洁的写法..NET Framework 3.5及以后版本更能用Action封装方法.例如以下写法可以看上去非常简洁: voi ...

  6. Python - Django - simple_tag 和 inclusion_tag

    simple_tag: simple_tag 和自定义 filter 类似,但可以接收更多更灵活的参数 在 app01/templatetags/ 目录下创建 mysimple_tag.py mysi ...

  7. ip地址分类和网段详解

    IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段 简单来说在公司或企业内部看到的就基本都是内网IP,ABC三类IP地址里的常见IP段. 每个IP地址都包含两部分,即网络号 ...

  8. SQL语句 update 字段=字段+字符串 拼接

    update user_info set user_name = concat(user_name,'呵呵呵') where user_name = '哈哈哈';

  9. 【转】百万年薪挖了p8,难道是水货?

    大厦新搬进来一家创业公司,老板红光满面地提着果篮上楼拜访,说是刚拿到了投资人的钱,正准备扩充团队大干一场.那个时候的他踌躇满志,顾盼生辉.当时我想,能在这个大环境下拿到投资的公司,做的产品应该是有前景 ...

  10. iOS 13 DeviceToken获取发生变化

    问题描述: iOS 13 通过[deviceToken description]获取到的内容已经变了,这段代码运行在 iOS 13 上已经无法获取到准确的DeviceToken字符串了, NSStri ...