字符流主要用于支持Unicode的文字内容,绝大多数在字节流中所提供的类,都可在此找到对应的类。其中,输入流Reader抽象类帮助用户在Unicode流内获得字符数据,而Writer类则实现了输出。可以利用Reader类是所有字符输入流的父类,而Writer类所有字符输出流的的父类。
Reader类和Writer类
以Reader和Writer为基础派生的一系列类。Reader和Writer都是抽像类。只提供了一系列用于字符流处理的接口。
FileReader类和FileWriter类。
前面的FileInputStream使用字节读取文件,字节流不能直接操作Unicode字符,所以java提供了字符流。
1.FileReader类
FileReader类于读取文件,每次读取文件中的第一个未读取过的字符,并以ASCII码或UTF-8码的形式输入到程序中。语法格式如下:

FileReader fr=new FileReader(filename)
其中文件名必须是文件完整的路径和文件名,如果程序和该文件保存在同一目录下,则可以只用文件名而不需要其路径,FileReader类中的read()方法用来读取字符并返回一个相应的int类型数据。当读到文件的结尾处时,则返回值-1,在完成文件数据的读取后需要使用close()方法关闭打开的文件。

代码如下:

import java.io.*;
public class FileReadDemo {
public static void main(String []args)throws IOException{
//创建一个FileRead类型的对象
FileReader fr=new FileReader("student.txt");
int a=fr.read();//从文件中读取字符并存入a中
while(a!=-1){//判断文件内容是否结束

System.out.print((char)a);//输出读取的字符到控制台
a=fr.read();//读取下一个字符
}
fr.close();//关闭文件 阅读器


}

}

在这个程序中构建一个文件阅读器FileReader的对象实例fr,通过while循环语句调用其read方法依次读取字符,并判断是否到了文件结束出。如果没有到文件结尾,则将读取的整数强制转换为char类型,并输出到控制台中,在程序最后,要关闭流。在声明main()方法时,添加了throwsIOException用来处理输出和输入文件时发生的异常。当然,也可以使用try和catch语句来处理异常。但是如果不需要异常的具体处理方法,则可以只用throws关键字。

2:FileWriter类

FileWriter类用于将数据写入文件语法格式如下:

FileWriter fr=new FileWriter(filename);

其中,文件名必须是文件的完整路径和文件名,如果程序和该文件保存在同一目录下,则可以只用文件名而不需要其他路径。如果该文件名不存在,则系统会自动创建该文件。FileWriter类中的write()方法可以将文字或字符串写入文件中。当完成数据写入操作后,使用close()方法关闭文件。示例代码如下:

import java.io.*;
public class FileWriter {
public static void main(String []args) throws IOException{
//创建一个FileWriter类型的对象
FileWriter fw=new FileWriter();
fw.write("thisismy");//像文件中写入字符串
fw.write("stu");
fw.write("dent");
fw.write(".");//向文件中写入字符
fw.write("txt");
fw.write("这个是我的文件。");
fe.close();

}

}

}

在这个程序中,构建了一个写入器FileWriter对象实例fw,调用其write()方法向文本文件student.txt中写入各种文本。在这个程序中,没有代码捕获异常,而是在main()方法头部使用throws关键字抛出IOException异常,将异常交给虚拟机处理。

字符流和字节流(FileReader类和FileWriter类)的更多相关文章

  1. 字符流;字节流;带缓冲的输入输出流;以及用scanner读文件

    概念: InputStream类是字节输入流的抽象类,是所有字节输入流的父类. OutputStream类是字节输入流的抽象类,是所有字节输出流的父类. In(可以理解为读)Out(可以理解为写) 一 ...

  2. Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律

    第一讲     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都 ...

  3. [Java] I/O底层原理之一:字符流、字节流及其源码分析

    关于 I/O 的类可以分为四种: 关于字节的操作:InputStream 和 OutPutStream: 关于字符的操作:Writer 和 Reader: 关于磁盘的操作:File: 关于网络的操作: ...

  4. 理解Java中字符流与字节流的区别

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

  5. Java字符流和字节流对文件操作

    记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询.Java的IO流分为字符流(Reader,Writ ...

  6. Java中字符流与字节流的区别

    字符流处理的单元为2个字节的Unicode字符,分别操作字符.字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组.所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单 ...

  7. 理解Java中字符流与字节流

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...

  8. 理解Java中字符流与字节流的区别(转)

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

  9. java字符流与字节流的区别是什么

    java中字符流与字节流的区别: 1.字节流操作的基本单元为字节:字符流操作的基本单元为Unicode码元. 2.字节流默认不使用缓冲区:字符流使用缓冲区. 3.字节流通常用于处理二进制数据,实际上它 ...

随机推荐

  1. 【BZOJ1088】[SCOI2005]扫雷Mine 递推

    调LCT奔溃,刷水调节一下. #include <iostream> #include <cstdio> #include <cstring> using name ...

  2. InterBase数据库迁移到MySQL(数据导出)

    这篇我将记叙我的第二个脚本程序,这篇我使用InterBase数据库提供的“isql”命令来导出我所要的数据,但是由于“isql”命令没有直接导出数据的语句,说以我采用的是导入一个配置文件,在这个文件中 ...

  3. Android -- 重设字符并统计原字符以及修改字符的长度以及位置

    1. 效果图

  4. spring源码学习之路---深度分析IOC容器初始化过程(四)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近由于工作和生活,学习耽搁 ...

  5. ORACLE 查看锁

    SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv$session s W ...

  6. upload控件上传json文件合并的两种方法

    方法一: byte[] byte1 = FileUpload1.FileBytes; byte[] byte2 = FileUpload2.FileBytes; byte[] a1 = Encodin ...

  7. Winform 窗体最小化隐藏在桌面右下角:转

    ICO文件要放到 bin\Debug 下 1.给主窗体添加 NotifyIcon 控件 2.窗体加载事件里 private void MainF_Load(object sender, EventAr ...

  8. mysql中一些简单但是新手容易犯的错误

    一.概述 本人近期使用mysql,由于是新手,常常碰到一些问题,因此,在这里做了一个错误备忘录. 二.错误罗列 1.MySQL 记录不存在时插入 记录存在则更新的实现方法 http://www.cnb ...

  9. [LintCode] Count and Say 计数和读法

    The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211, 111221 ...

  10. android-时间选择器和日期选择器

    一.实现动态输入日期和时间 * DataPicker(日历选择器) * DataPicker对象以init()方法指定DatePicker初始的年月日及OnDateChangedListener事件 ...