在上一节,介绍了字节流的基本使用,本节介绍一下字符流的使用

Reader:

public abstract class Reader implements Readable, Closeable {
protected Object lock;
private static final int maxSkipBufferSize = 8192;
private char[] skipBuffer = null; protected Reader() {
this.lock = this;
} protected Reader(Object var1) { } public int read(CharBuffer var1) throws IOException { } //试图将文件中的字符读入指定的字符缓冲区 public int read() throws IOException { } //从文件中读取单个字符 public int read(char[] var1) throws IOException { } //从文件中读取字符到var1 public abstract int read(char[] var1, int var2, int var3) throws IOException; //将文件中的字符读入cbuf数组,从off位置开始,读取len个字符 public long skip(long var1) throws IOException { } //跳过var1个字符 public boolean ready() throws IOException { } //判断是否准备读取此流 public boolean markSupported() { } //判断此流是否支持mark()操作 public void mark(int var1) throws IOException { } //标记流中的当前位置 public void reset() throws IOException { } //重置 public abstract void close() throws IOException;
}

我们可以发现Reader和InputStream的方法相差不大,是定义字符输入流的抽象类

Writer:

public abstract class Writer implements Appendable, Closeable, Flushable {
private char[] writeBuffer;
private static final int WRITE_BUFFER_SIZE = 1024;
protected Object lock; protected Writer() {
this.lock = this;
} protected Writer(Object var1) { } public void write(int var1) throws IOException { } //写入单个字符到文件中 public void write(char[] var1) throws IOException { } //将char[] var1中的内容写入文件 public abstract void write(char[] var1, int off, int len) throws IOException; //将字符数组var1中从off开始的len个字节写入文件 public void write(String var1) throws IOException { } //将字符串var1写入到文件中 public void write(String var1, int off, int len) throws IOException { } //写入var1从off位置开始的len个字符到文件中 public Writer append(CharSequence var1) throws IOException { } //将制定字符序列添加到此writer public Writer append(CharSequence var1, int var2, int var3) throws IOException { } //将指定字符序列的子序列添加到此writer public Writer append(char var1) throws IOException { } //将制定字符添加到此writer public abstract void flush() throws IOException; //强制提交,刷新该流的缓冲 public abstract void close() throws IOException; //关闭
}

FileReader、FileWriter:

public static void main(String[] args) throws IOException {
String pathName = "D:" + File.separator + "a.txt";
FileWriter fileWriter = new FileWriter(pathName);
fileWriter.write("abcabcabcabcabcabc".toCharArray());
fileWriter.close();
FileReader fileReader = new FileReader(pathName);
char[] chars = new char[1024];
fileReader.read(chars);
for (char c : chars) {
System.out.print(c);
}
fileReader.close();
}

BufferedReader、BufferedWriter:

public static void main(String[] args) throws IOException {
String pathName = "D:" + File.separator + "a.txt";
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(pathName));
bufferedWriter.write("abcabcabcabcabcabc".toCharArray());
bufferedWriter.newLine(); //跳到下一行
bufferedWriter.write("next line".toCharArray());
bufferedWriter.close();
BufferedReader bufferedReader = new BufferedReader(new FileReader(pathName));
char[] chars = new char[1024];
bufferedReader.read(chars);
for (char c : chars) {
System.out.print(c);
}
System.out.println(bufferedReader.readLine());  //读取一行数据
bufferedReader.close();
}

新增了newLine()和readLine()

至于CharArrayReader和CharArrayWrite、PipedReader和PipedWriter等和InputStream、OutputStream中子类使用都是相似的,自行类比

字符流和字节流最大的区别:

  字节流在操作时本身不会用到缓冲区,是对文件本身直接操作的

  字符流操作时使用了缓冲区,通过缓冲区再操作文件,要使用flush()或者close()

  如果没有的话,缓冲区中的内容是无法输出的

最新文章

  1. pt-table-checksum
  2. Owin:“System.Reflection.TargetInvocationException”类型的未经处理的异常在 mscorlib.dll 中发生
  3. C++远征之封装篇(下)
  4. maven环境配置+eclipse环境配置
  5. ubuntu 更换系统语言,Change System Language
  6. create和grant配合使用,对Mysql进行创建用户和对用户授权
  7. ArcGIS Runtime for Android 使用异步GP服务绘制等值线
  8. 登堂入室——java流
  9. 灵活运用Zend框架
  10. 学习总结---SNAT和DNAT
  11. 理解Object.defineProperty()
  12. django模板语言中的extends,block和include
  13. Ubuntu18.04美化主题(mac主题)
  14. O2O淘宝优惠券代码总结
  15. dee
  16. 【转】Ubuntu 64位系统安装交叉编译环境一直提醒 没有那个文件或目录
  17. xlwt使用
  18. centos7 修改中文字符集
  19. CISCO ASA 5505 经典配置案例
  20. 手写数字识别---demo

热门文章

  1. saltstack源码-启动1
  2. HDU 4893 Wow! Such Sequence! (树状数组)
  3. bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式【后缀自动机】
  4. zoj 2532 Internship【最小割】
  5. centos安装PHP扩展(bcmath)
  6. [ZOJ1610]Count the Colors
  7. 【BZOJ3309】DZY Loves Math(线性筛)
  8. 51nod1183 编辑距离
  9. 题解报告:Luogu P3368 【模板】树状数组 2(区间修改,单点查询)
  10. 实现字符串的查找和替换 分类: c/c++ 2014-10-09 22:33 469人阅读 评论(0) 收藏