JavaIO-字符流
来源:互联网 发布:海报设计制作软件 编辑:程序博客网 时间:2024/04/29 19:23
12.3.2 字符流(1)
在程序中一个字符等于两个字节,那么Java提供了Reader和Writer两个专门操作字符流的类。
1.字符输出流Writer
Writer本身是一个字符流的输出类,此类的定义如下:
- public abstract class Writer
- extends Object
- implements Appendable, Closeable, Flushable
此类本身也是一个抽象类,如果要使用此类,则肯定要使用其子类,此时如果是向文件中写入内容,应该使用FileWriter的子类。Wirter类的常用方法如表12-5所示。
表12-5 Writer类的常用方法
序 号
方 法
类 型
描 述
1
public abstract void close()
hrows IOException
普通
关闭输出流
2
public void write(String str)
throws IOException
普通
将字符串输出
3
public void write(char[] cbuf)
throws IOException
普通
将字符数组输出
4
public abstract void flush()
throws IOException
普通
强制性清空缓存
FileWriter类的构造方法定义如下:
- public FileWriter(File file) throws IOException
U提示:关于Appendable接口的说明。
在Writer类中除了实现Closeable和Flushable两个接口之外,还实现了一个Appendable接口,此接口定义如下:
- public interface Appendable{
- Appendable append(CharSequence csq) throws IOException ;
- Appendable append(CharSequence csq,int start,int end) throws IOException ;
- Appendable append(char c) throws IOException
- }
此接口表示的是内容可以被追加,接收的参数是CharSequence,实际上String类就实现了此接口,所以可以直接通过此接口的方法向输出流中追加内容。
范例:向文件中写入数据
- package org.lxh.demo12.chariodemo;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.Writer;
- public class WriterDemo01 {
- public static void main(String[] args)throws Exception { // 异常抛出,
- 不处理
- // 第1步:使用File类找到一个文件
- File f = new File("d:" + File.separator + "test.txt");// 声明File
- 对象
- // 第2步:通过子类实例化父类对象
- Writer out = null; // 准备好一个输出的对象
- out = new FileWriter(f); // 通过对象多态性,进行实例化
- // 第3步:进行写操作
- String str = "Hello World!!!"; // 准备一个字符串
- out.write(str); // 将内容输出
- // 第4步:关闭输出流
- out.close(); // 关闭输出流
- }
- }
整个程序与OutputStream的操作流程并没有什么太大的区别,唯一的好处是,可以直接输出字符串,而不用将字符串变为byte数组之后再输出。
程序运行结果:
12.3.2 字符流(2)
2.使用FileWriter追加文件的内容
在使用字符流操作时,也可以实现文件的追加功能,直接使用FileWriter类中的以下构造即可实现追加:
- public FileWriter(File file,boolean append) throws IOException
将append的值设置为true,表示追加。
范例:追加文件内容
- package org.lxh.demo12.chariodemo;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.Writer;
- public class WriterDemo02 {
- public static void main(String[] args)throws Exception { // 异常抛出,
- 不处理
- // 第1步:使用File类找到一个文件
- File f = new File("d:" + File.separator + "test.txt"); // 声明File
- 对象
- // 第2步:通过子类实例化父类对象
- Writer out = null; // 准备好一个输出的对象
- out = new FileWriter(f,true); // 通过对象多态性进行实例化
- // 第3步:进行写操作
- String str = "\r\nLIXINGHUA\r\nHelloWorld!!!" ; // 准备一个字符串
- out.write(str); // 将内容输出
- // 第4步:关闭输出流
- out.close(); // 关闭输出流
- }
- }
程序运行结果:
3.字符输入流Reader
Reader是使用字符的方式从文件中取出数据,Reader类的定义如下:
- public abstract class Reader
- extends Object
- implements Readable, Closeable
Reader本身也是抽象类,如果现在要从文件中读取内容,则可以直接使用FileReader子类。Reader类的常用方法如表12-6所示。
表12-6 Reader类的常用方法
序号
方 法
类型
描 述
1
public abstract void close()
throws IOException
普通
关闭输出流
2
public int read() throws IOException
普通
读取单个字符
3
public int read(char[] cbuf)
throws IOException
普通
将内容读到字符数组中,
返回读入的长度
FileReader的构造方法定义如下:
- public FileReader(File file) throws FileNotFoundException
范例:从文件中读取内容
- package org.lxh.demo12.chariodemo;
- import java.io.File;
- import java.io.FileReader;
- import java.io.Reader;
- public class ReaderDemo01 {
- public static void main(String[] args) throws Exception { // 异常抛出,
- 不处理
- // 第1步:使用File类找到一个文件
- File f = new File("d:" + File.separator + "test.txt");// 声明File
- 对象
- // 第2步:通过子类实例化父类对象
- Reader reader = null; // 准备好一个输入的对象
- reader = new FileReader(f); // 通过对象多态性进行实例化
- // 第3步:进行读操作
- char c[] = new char[1024]; // 所有的内容读到此数组中
- int len = reader.read(c); // 将内容输出
- // 第4步:关闭输入流
- reader.close(); // 关闭输入流
- System.out.println("内容为:" + new String(c, 0, len));
- // 把char数组变为字符串输出
- }
- }
12.3.2 字符流(3)
程序运行结果:
- 内容为:Hello World!!!
- LIXINGHUA
- Hello World!!!
- LIXINGHUA
- Hello World!!!
如果此时不知道数据的长度,也可以像之前操作字节流那样,使用循环的方式进行内容的读取。
范例:使用循环的方式读取内容
- package org.lxh.demo12.chariodemo;
- import java.io.File;
- import java.io.FileReader;
- import java.io.Reader;
- public class ReaderDemo02 {
- public static void main(String[] args)
throws Exception { // 异常抛出,- 不处理
- // 第1步:使用File类找到一个文件
- File f = new File("d:" + File.
separator + "test.txt");// 声明File- 对象
- // 第2步:通过子类实例化父类对象
- Reader reader = null;
// 准备好一个输入的对象- reader = new FileReader(f);
// 通过对象多态性进行实例化- // 第3步:进行读操作
- int len = 0;
// 用于记录读取的数据个数- char c[] = new char[1024];
// 所有的内容读到此数组中- int temp = 0;
// 接收读取的每一个内容- while ((temp = reader.read()) != -1) {
- // 将每次的读取内容给temp变量,
如果temp的值不是-1,则表示文件没有读完- c[len] = (char) temp;
- len++;
- }
- // 第4步:关闭输入流
- reader.close(); // 关闭输入流
- System.out.println("内容为:" + new String(c, 0, len));
- }
- }
程序运行结果:
- 内容为:Hello World!!!
- LIXINGHUA
- Hello World!!!
- LIXINGHUA
- Hello World!!!
- JavaIO-字符流
- javaIO-字符流-OutputStreamWriter
- javaIo 字符流
- JavaIO字符流
- javaIO流,字符流详解
- javaIO之文件字符流
- JavaIO-字节流与字符流详解
- javaIO流中的字节字符流整理
- javaIO流中的字节字符流整理
- JavaIO之字符流和字节流
- javaio学习笔记-字符流类(1)
- javaio学习笔记-字符流类(2)
- JavaIO常用字节流和字符流
- javaIO-字符流-写操作 FileWriter
- 【JavaIO】JavaIO流分类
- JavaIO流基础之字节流与字符流
- JavaIO字节流与字符流的区别详解
- JavaIO-字节流和字符流的区别
- MySQL事务隔离级别详解
- Java学习笔记(1)——java的JDK安装好后运行cmd告知没有安装成功?
- 自己实现线程的start、suspend、resume、stop方法
- jdbcTemplate配置文件
- 习题10-23 Hendrie序列 UVa10479
- JavaIO-字符流
- PADS学习之路09-PADS LOGIC创建原理图工程文件
- 简单数学训练-B
- Activity启动模式
- Testing Level - 读书笔记 ( 二 )
- JSTL+BeanUtils+分页+文件上传,sitemesh用来进行前端模板
- c++实现split()字符串切片
- 简单数学训练-A
- JavaIO-字节流和字符流的区别