当前位置 : IT培训网 > Java开发 > Java教程 > Java编程开发中面向字符的输入流

Java编程开发中面向字符的输入流

时间:2016-08-30 16:52:34  来源:Java培训网  作者:IT培训网  已有:名学员访问该课程
标签(Tag):   java(716)Reader(14)Writer(5)
Reader和Writer是java.io包中所有字符流的父类。由于它们都是抽象类,所以应使用它们的子类来创建实体对象,利用对象来处理相关的读写操作。Reader和Writer的子类又可以分为两大类:一类用来从数据源读入数据或往目的地写出数据(

Java编程开发中面向字符的输入流怎么学习呢,对于很多小盆友不理解,今天IT培训网小编就来给大家详细介绍下吧。

什么是字符流?

字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件。 Reader和Writer是java.io包中所有字符流的父类。由于它们都是抽象类,所以应使用它们的子类来创建实体对象,利用对象来处理相关的读写操作。Reader和Writer的子类又可以分为两大类:一类用来从数据源读入数据或往目的地写出数据(称为节点流),另一类对数据执行某种处理(称为处理流)。

面向字符的输入流类都是Reader的子类,其类层次结构如图10-2所示。

Java编程开发中面向字符的输入流_www.itpxw.cn

图10-2 Reader的类层次结构图

表 10-1 列出了 Reader 的主要子类及说明。

表 10-1 Reader 的主要子类

类名

功能描述

CharArrayReader

从字符数组读取的输入流

BufferedReader

缓冲输入字符流

PipedReader

输入管道

InputStreamReader

将字节转换到字符的输入流

FilterReader

过滤输入流

StringReader

从字符串读取的输入流

LineNumberReader

为输入数据附加行号

PushbackReader

返回一个字符并把此字节放回输入流

FileReader

从文件读取的输入流

 

Reader 所提供的方法如表 10-2 所示,可以利用这些方法来获得流内的位数据。

表 10-2 Reader 的常用方法

方法

功能描述

void close()

关闭输入流

void mark()

标记输入流的当前位置

boolean markSupported()

测试输入流是否支持 mark

int read()

从输入流中读取一个字符

int read(char[] ch)

从输入流中读取字符数组

int read(char[] ch, int off, int len)

从输入流中读 len 长的字符到 ch 内

boolean ready()

测试流是否可以读取

void reset()

重定位输入流

long skip(long n)

跳过流内的 n 个字符

 

使用 FileReader 类读取文件

FileReader 类是 Reader 子类 InputStreamReader 类的子类,因此 FileReader 类既可以使用Reader 类的方法也可以使用 InputStreamReader 类的方法来创建对象。

在使用 FileReader 类读取文件时,必须先调用 FileReader()构造方法创建 FileReader 类的对象,再调用 read()方法。FileReader 构造方法的格式为:

    public FileReader(String name);  //根据文件名创建一个可读取的输入流对象

【例 10-1】利用 FileReader 类读取纯文本文件的内容。

【例 10-1】利用 FileReader 类读取纯文本文件的内容。

//********** ep10_1.java **********

import java.io.*;

class ep10_1{

    public static void main(String args[]) throws IOException{

        char a[]=new char[1000]; //创建可容纳 1000 个字符的数组

        FileReader b=new FileReader("ep10_1.txt");

        int num=b.read(a); //将数据读入到数组 a 中,并返回字符数

        String str=new String(a,0,num); //将字符串数组转换成字符串

        System.out.println("读取的字符个数为:"+num+",内容为:\n");

        System.out.println(str);

    }

}

运行结果如图 10-3 所示:

Java编程开发中面向字符的输入流_www.itpxw.cn

图 10-3  例 10_1 运行结果(输出内容为文件ep10_1.txt的内容)

需要注意的是,Java 把一个汉字或英文字母作为一个字符对待,回车或换行作为两个字符对待。

使用 BufferedReader 类读取文件

BufferedReader 类是用来读取缓冲区中的数据。使用时必须创建 FileReader 类对象,再以该对象为参数创建 BufferedReader 类的对象。BufferedReader 类有两个构造方法,其格式为:

    public BufferedReader(Reader in);  //创建缓冲区字符输入流

    public BufferedReader(Reader in,int size);  //创建输入流并设置缓冲区大小

【例 10-2】利用 BufferedReader 类读取纯文本文件的内容。

//********** ep10_2.java **********

import java.io.*;

class ep10_2{

    public static void main(String args[]) throws IOException{

        String OneLine;

        int count=0;

        try{

                FileReader a=new FileReader("ep10_1.txt");

                BufferedReader b=new BufferedReader(a);

                while((OneLine=b.readLine())!=null){  //每次读取 1 行

                     count++;  //计算读取的行数

                     System.out.println(OneLine);

                }

                System.out.println("\n 共读取了"+count+"行");

                b.close();

           }

           catch(IOException io){

                System.out.println("出错了!"+io);

           }

      }

}

运行结果如图 10-4 所示:

Java编程开发中面向字符的输入流_www.itpxw.cn

图 10-4  例 10_2 运行结果

需要注意的是,执行 read()或 write()方法时,可能由于 IO 错误,系统抛出 IOException 异常,需要将执行读写操作的语句包括在 try 块中,并通过相应的 catch 块来处理可能产生的异常。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
------分隔线----------------------------
Java教程
1、Java 概述
1.1 Java语言概述
1.2 Java虚拟机以及跨平台原理
1.3 Java的主要就业方向
1.4 Java的不同版本
1.5 Java开发环境搭建
1.6 第一个Java程序示例
1.7 Java类和对象的概念
1.8 Java类库及其组织结构
1.9 Java import
2、Java 语法基础
2.1 Java数据类型以及变量的定义
2.2 Java数据类型转换
2.3 Java运算符
2.4 Java流程控制
2.5 Java数组的定义和使用
2.6 Java字符串(String)
2.7 Java StringBuffer与StringBuider
2.8 强调一下编程风格
3、Java 类与对象
3.1 Java类的定义及其实例化
3.2 Java访问修饰符
3.3 Java变量的作用域
3.4 Java this关键字详解
3.5 Java方法重载
3.6 Java类的基本运行顺序
3.7 Java包装类、拆箱和装箱详解
3.8 再谈Java包
3.9 源文件的声明规则
4、Java 继承和多态
4.1 继承的概念与实现
4.2 Java super关键字
4.3 继承中的方法的覆盖和重载
4.4 多态和动态绑定
4.5 instanceof 运算符
4.6 多态对象的类型转换
4.7 Java static关键字
4.8 Java final关键字
4.9 Java Object类
5、面向对象高级特性
5.1 Java内部类及其实例化
5.2 内部类的分类
5.3 抽象类的概念和使用
5.4 接口的概念和使用
5.5 接口和抽象类的区别
5.6 Java 泛型
5.7 泛型通配符和类型参数的范围
6、异常处理
6.1 异常处理基础
6.2 异常类型Java语言中常见的异常类型有哪些
6.3 未被捕获的异常
6.4 try和catch的使用
6.5 多重catch语句的使用
6.6 try语句的嵌套
6.7 throw:异常的抛出
6.8 throws子句
6.9 finally块
6.10 Java的内置异常
6.11 创建自己的异常子类
6.12 断言
7、线程编程
7.1 线程的概念
7.2 Java线程模型
7.3 主线程
7.4 创建线程
7.5 创建多线程
7.6 isAlive()和join()的使用
7.7 线程优先级
7.8 线程同步
7.9 线程间通信
7.10 线程死锁
7.11 线程的挂起、恢复和终止
8、输入输出(IO)操作
8.1 输入输出基本概念
8.2 面向字符的输入流
8.3 面向字符的输出流
8.4 面向字节的输入输出流
8.5 面向字节流的应用
8.6 文件与目录管理
8.7 文件的随机读写
8.8 文件的压缩处理
9、常用类库、向量与哈希
9.1 Java基础类库
9.2 Object类
9.3 Java语言包(java.lang)简介
9.4 日期和时间类
9.5 向量及其应用
9.6 哈希表及其应用
10、图形界面(GUI)设计
10.1 图形界面设计基础
10.2 框架窗口
10.3 标签、按钮和按钮事件
10.4 面板
10.5 布局设计
10.6 文本框和文本区
10.7 文本框和文本区的输入输出
10.8 选择框和单选按钮
10.9 列表和组合框
10.10 菜单
10.11 对话框
10.12 滚动条
10.13 鼠标事件
10.14 键盘事件
11、图形、图像与多媒体
11.1 绘图基础
11.2 设置字型和颜色
11.3 绘图模式
11.4 Graphics类的绘图方法
11.5 Graphics2D类的绘图方法
11.6 图像处理基础
11.7 图像缓冲技术
11.8 多媒体基础
12、网络与数据库编程
12.1 IP地址和InetAddress类
12.2 统一资源定位符
12.3 套接字(Socket)
12.4 数据库连接
12.5 几个重要的类和接口
12.6 数据库查询
12.7 数据库更新
12.8 插入记录
12.9 修改记录
12.10 删除记录