CharArrayReader和CharArrayWriter类

本文演示了如何利用 Java 中的 CharArrayReader 和 CharArrayWriter 类实现文本文件的随机访问编辑功能。通过读取文件到字符数组,允许用户指定位置进行修改,并最终将更新后的数组内容保存回文件。

1. 前面我们介绍过ByteArrayInputStream、ByteArrayOutputStream,它们是将位数组当作流输入来源、输出目的地的工具类。与其类似的是java.io.CharArrayReader与java.io.CharArrayWriter,使用它们可以将字符数组当作字符数据输入输出的来源和目的。

2. 由于Java中的字符是Unicode字符,通过这个特性,可以将文本文件的内容读入字符数组,对字符数组作随机存取,然后再将之写回文件。这样文本文件也可以达到类似随机存取的功能。

3. 下面的范例可以打开一个简单的文本文件,其中有简单的英文和中文字符,在读取文件之后,可以直接以程序来指定文本文件的字符位置,以修改所指定的字符。程序的作法是将字符读入字符数组中,修改指定索引处的数组元素,在修改完数组内容之后,重新将字符数组存回文件。

package ysu.hxy;
import java.io.*;
import java.util.*;

public class CharArrayReaderWriterDemo
{
	public static void main(String[] args) 
	{
		try
		{
			File file = new File(args[0]);

			BufferedReader bufInputReader = 
				new BufferedReader(
				    new FileReader(file));

			//将文件读入字符数组
			CharArrayWriter charArrayWriter = 
				new CharArrayWriter();

			char[] array = new char[1];
			while(bufInputReader.read(array)!=-1)
			{
				charArrayWriter.write(array);
			}

			charArrayWriter.close();
			bufInputReader.close();

			//显示字符内容
			array = charArrayWriter.toCharArray();
			for(int i=0; i<array.length; i++)
			{
				System.out.print(array[i]+ " ");
			}
			System.out.println();

            //让使用者输入位置与字符修改字符数组内容
			Scanner scanner = new Scanner(System.in);

			System.out.println("输入修改位置");
            int pos = scanner.nextInt();
            System.out.println("输入修改字符");
			char ch = scanner.next().charAt(0);
			array[pos-1] = ch;

			//将字符数组内容存回文件
			CharArrayReader charArrayReader = new CharArrayReader(array);
			
			BufferedWriter bufWriter = new BufferedWriter(
				 new FileWriter(file));
            
			char[] tmp = new char[1];
			while(charArrayReader.read(tmp)!=-1)
			{
				bufWriter.write(tmp);
			}

            charArrayReader.close();
			bufWriter.flush();
			bufWriter.close();
		}
		catch(ArrayIndexOutOfBoundsException e)
		{
			System.out.println("请指定文件名!");
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
	}
}

 

(一)基础知识 【考试要求】 了解 Java 语言的历史特点;掌握 Java 的程序结构及开发环境的搭建;熟悉 Java 语言 的各种数据型;掌握变量常量的定义方法;掌握基本数据型的转换;掌握运算符与表达式的运用;熟悉 Java 的编码规范。 【主要考点】 1.Java 语言的历史、现状、特点、基本程序结构以及编程环境的搭建 2.Java 语言的数据型: (1)基本数据型:byte、short、int、long、float、double、char、boolean (2)引用数据型:、接口、数组 3.常量变量 常量的各种表示形式型,变量的定义初始化 4.数据型转换 显示转换,隐式转换 5.运算符 赋值运算符、算术运算符、自增/减运算符、关系运算符、逻辑运算符、位运算符、条件 运算符等 6.表达式 表达式的组成规则,表达式运算中的型转换、优先级结合性 7.Java 编程规范 (二)流程控制结构 【考试要求】 熟悉流程控制分为顺序结构、选择结构循环结构,掌握选择结构循环结构的具体实 现。 【主要考点】 1.Java 程序的基本结构 2.选择结构 (1)if 语句 (2)switch 语句 3.循环结构 (1)for 语句 (2)while 语句 (3)do-while 语句 4.跳转语句 (1)break 语句 (2)continue 语句 (3)return 语句 5.循环语句与分支语句的嵌套 (三)面向对象程序设计 【考试要求】 掌握面向对象程序设计的特点基本概念;掌握的声明;掌握对象的创建使用;掌 握继承多态的概念应用;掌握接口的声明实现;掌握包的声明、包与的引入;掌握 Java 库常用的使用 【主要考点】 1.面向对象程序设计的基本概念 、对象、成员变量、成员方法、封装、继承、多态 2.的基本组成 (1)的声明 (2)成员变量的声明 (3)成员方法的声明与调用,方法的参数传递与返回值 (4)方法的重载 (5)静态变量静态方法 3.对象的创建使用 (1)对象的创建 (2)构造方法与对象的初始化 (3)成员变量、成员方法的访问 (4)this (5)引用的赋值 4.的继承 (1)子的声明 (2)super (3)变量覆盖方法覆盖 (4)final final 方法 5.及成员的四种访问权限 (1)的访问权限:默认权限、public (2)成员的访问权限:public、private、protected、默认权限 6.抽象与接口 (1)abstract abstract 方法的声明 (2)接口的声明与实现 7.包 (1)包的声明及 package 语句 (2)包的引入及 import 语句 8.常用的使用 (1)String 字符串的基本操作:对象创建,字符串的比较,字符的访问与查找,子串 的查找,字符串的连接。 (2)StringBuffer 字符串的基本操作:对象创建,字符串的修改,与 String 字符串 的相互转换。 (3)Math Random 的常用方法。 (4)基本型的包装及其常用方法。 (5)了解 Object Class 。 (四)数组 【考试要求】 掌握一维数组、二维数组的声明、创建与使用。 【主要考点】 1.数组的声明、创建初始化 2.数组的大小元素默认值 3.数组元素的使用 (五)图形用户界面程序设计 【考试要求】 掌握 AWT Swing 常用组件与容器的使用方法;掌握窗口应用程序的构建方法;掌握 常用布局管理器的使用方法;掌握常用事件的处理方法。 【主要考点】 1.常用组件容器的创建使用 标签、文本框、按钮、文本区域、复选框、单选钮、下拉列表、列表、定时器、窗口、 面板、对话框、文件选择器 JFileChooser、颜色选择器 JColorChooser 等。 2.常用布局管理器的使用 FlowLayout、BorderLayout、GridLayout、CardLayout 3.事件处理模型与常见事件的处理 (1)事件、事件源、事件处理者及事件处理模型; (2)WindowEvent、ActionEvent、ItemEvent、KeyEvent、MouseEvent、FocusEvent、TextEvent 的处理。 (六)异常处理 【考试要求】 理解异常处理机制;熟悉常用异常;掌握用 try-catch-finally 语句捕获异常;掌握抛出 异常声明抛出异常;掌握自定义异常的声明使用。 【主要考点】 1 异常的概念 2.常用的异常 3.异常的捕获与处理:try-catch-finally 4.异常的抛出:throw 语句,throws 子句 5.自定义异常 (七)输入输出流及文件操作 【考试要求】 理解输入输出流的概念;熟悉流的分;掌握常用流的使用方法;掌握系统标准输入 输出的使用方法;掌握用 Scanner 输入数据的方法;掌握用 File 管理文件目录的方 法;掌握用 RandomAccessFile 读写随机访问文件的方法。 【主要考点】 1.流的分 输入流与输出流,字节流与字符流,节点流与过滤流 2.常用流 (1) 常 用 字 节 流 : FileInputStream 、 FileOutputStream 、 ByteArrayInputStream 、 ByteArrayOutputStream 、 BufferedInputStream 、 BufferedOutputStream 、 DataInputStream 、 DataOutputStream、ObjectInputStream、ObjectOutputStream、PrintStream (2)常用字符流:FileReader、FileWriter、CharArrayReaderCharArrayWriter、StringReader、 StringWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter 3.系统标准输入输出操作 4.File 文件创建、文件删除、文件夹创建、目录列表、文件属性获取设置、文件重命名 5.RandomAccessFile (八)高级编程基础 【考试要求】 理解多线程程序设计的概念;掌握线程的创建、生命周期、调度控制;了解线程的同 步。 【主要考点】 多线程 1.多线程的概念 2.线程的创建 3.线程的生命周期、调度基本控制 4.线程的同步
最新发布
03-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值