java字符流解析_Java IO(四):字符流详解

一、字符流

字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为一个Unicode字符占用2个字节,而字节流一次只能操作一个字节。既然Java的口号就是"一次编写、处处运行",那么包含直接的字符输入/输出的支持是必要的。因此就有一些字符输入/输出流,之前已经说明过了,字符流顶层是Reader和Writer这两个抽象类,因此就从这里开始本文。

二、Reader

Reader是定义Java的字符输入流的抽象类,该类的所有方法在出错的情况下都将引发IOException。Reader类中有这些方法:

方    法

作    用

abstract void close()

关闭该流并释放与之关联的所有资源

void mark(int readAheadLimit)

标记流中的当前位置

boolean markSupported()

判断此流是否支持mark()操作

int read()

从文件中读取单个字符

int read(char[] cbuf)

从文件中读取字符到cbuf

abstract int read(char[] cbuf, int off, int len)

将文件中的字符读入cbuf数组,从off位置开始,读取len个字符。三个read方法在字符可用、发生I/O异常或者已经到达流的末尾前,此方法会一直阻塞

int read(CharBuffer target)

试图将文件中的字符读入指定的字符缓冲区

boolean ready()

判断是否准备读取此流

voi reset()

重置该流

long skip(long n)

跳过n个字符

三、Writer

Writer是定义字符输出流的抽象类,所有该类的方法都返回一个void值并在出错的条件下引发IOException。Writer类中的方法有:

方    法

作    用

Writer append(char c)

将制定字符添加到此writer

Writer append(CharSequence csq)

将制定字符序列添加到此writer

Writer append(CharSequence csq, int start, int end)

将指定字符序列的子序列添加到此writer.Appendable

abstract void close()

关闭此流,但要先flush()它

abstract void flush()

刷新该流的缓冲

void write(char[] cbuf)

将cbuf中的内容写入文件

abstract void write(char[] cbuf, int off, int len)

将字符数组cbuf中从off开始的len个字节写入文件

void write(int c)

写入单个字符到文件中

void write(String str)

写入字符串到文件中

void write(String str, int off, int len)

写入str从off位置开始的len个字符到文件中

四、FileReader和FileWriter

FileReader类创建了一个可以读取文件内容的Reader类,最常用的构造方法是:

1、FileReader(String fileName)

2、FileReader(File file)

FileWriter创建了一个可以写文件的Writer类,最常用的构造方法是:

1、FileWriter(String fileName)

2、FileWriter(String fileName, boolean append)

3、FileWriter(File file)

其中第二个构造方法,如果append为true,那么输出是追加到文件结尾的。FileWriter类的创建不依赖文件是否存在,在创建文件之前,FileWriter将在创建对象时打开它来作为输出。如果试图打开一个只读文件,那么将引发一个IOException。看一下FileWriter和FileReader的使用,现在D盘FIles文件夹下没有"writer.txt":

packagecom.demo.io;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.Reader;importjava.io.Writer;public classFileReaderWriterTest {public static void main(String[] args) throwsException{

File file= new File("D:/Files/writer.txt");

Writer out= newFileWriter(file);//声明一个String类型对象

String str = "Hello World!!!";

out.write(str);

out.close();//读文件操作

Reader in = newFileReader(file);//开辟一个空间用于接收文件读进来的数据

char c0[] = new char[1024];int i = 0;//将c0的引用传递到read()方法之中,同时此方法返回读入数据的个数

i =in.read(c0);

in.close();if(i==-1){

System.out.println("文件中无数据");

}else{

System.out.println(new String(c0,0,i));

}

}

}

利用FileWriter和FileReader进行了一次的读写操作,先看一下D盘Files文件夹下是否有"writer.txt",假如有"writer.txt"那"writer.txt"中又是什么:

fff6c98081bf8904098fb5e1bd59ff4b.gif

看来利用FileWriter写入一个内存中的字符串到文件中是成功了,那么利用利用FileReader读入文件中的内容到内存呢,看一下运行结果:

Hello World!!!

打印结果和文件中的内容一致,说明FileReader的操作也成功。

这就是FileWriter和FileReader的使用,和FileOutputStream和FileInputStream的使用差不多,不过实际操作中一般不会用FileWriter和FileReader,这将在下一篇文章进行讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值