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

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()

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

Java IO(四--字符流基本使用的更多相关文章

  1. Java IO: 其他字符流(下)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...

  2. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  3. [Java IO]03_字符流

    Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类.  它的定义如下: public abstra ...

  4. Java IO编程——字符流与字节流

    在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...

  5. java IO之 字符流 (字符流 = 字节流 + 编码表) 装饰器模式

    字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在 ...

  6. Java——IO类 字符流概述

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  7. Java IO系统--字符流

    字符流:尽管字节流提供了处理任何类型输入/输出操作的足够功能,它们补鞥呢直接操作Unicode字符.字符流层次结构的顶层是Reader和Writer抽象类.类似于InputStream和OutputS ...

  8. Java IO之字符流

    public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("/User ...

  9. java字节流和字符流,以及java文件操作

    A.首先说字节流:1.字节流在操作的时候不会用到缓冲区(也就是内存)2.字节流可用于任何类型的对象,包括二进制对象3.字节流处理单元为1个字节,操作字节和字节数组.InputStream是所有字节输入 ...

随机推荐

  1. 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统

    [摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力 ...

  2. js 弹出对话框的方法总结

    原文:http://www.cnblogs.com/xiaofengfeng/archive/2012/10/20/2732784.html <!DOCTYPE html PUBLIC &quo ...

  3. 并不对劲的bzoj4560:p3269:[JLOI2016]字符串覆盖

    题目大意 \(T\)(\(T\leq10\))组询问 每组询问给出一个字符串\(A\)(\(|A|\leq10^4\)),\(n\)(\(n\leq4\))个\(A\)的子串\(B_1,B_2,B_3 ...

  4. 守护线程Daemon的理解

    1.守护线程伴随着主线程的销毁而销毁: 2.jvm虚拟机中有很多守护线程,随着main函数的结束而结束,自动回收栈中的内容. Thread t1 = new Thread(){ @Override p ...

  5. 【HDU 2196】 Computer

    [题目链接] 点击打开链接 [算法] 我们知道,一棵树上离某个节点最远的节点,可能是经过它的祖先,再到那个祖先的某个孩子,或者,是它的那颗子树中,离它最远的一个节点,就不难想到以下算法 : 第一遍DF ...

  6. shell 与 空格

    shell脚本中,不能随意添加空格,否则出错: 1,=等号两边必须无空格.否则出错.如i =$1和i= $1都是错的.但是在()内部不限制如for ((i= 1;i < 3;i= i+1))是正 ...

  7. bzoj3090

    树形dp 有一个比较明显的dp状态是dp[i][j]表示当前i节点的子树已经满足且i剩下j元钱的最小操作次数,这样复杂度比较高状态数已经有O(n*x)的了,转移再来x,肯定不行. 我们考虑把状态和dp ...

  8. Gym 100512F Funny Game (博弈+数论)

    题意:给两个数 n,m,让你把它们分成 全是1,每次操作只能分成几份相等的,求哪一个分的次数最多. 析:很明显,每次都除以最小的约数是最优的. 代码如下: #pragma comment(linker ...

  9. [POI2007]对称轴osi

    Description FGD小朋友--一个闻名遐迩的年轻数学家--有一个小MM,yours.FGD小朋友非常喜欢他的MM,所以他很乐意帮助他的MM做数学作业.但是,就像所有科学的容器一样,FGD的大 ...

  10. [转]在 Azure 云服务上设计大规模服务的最佳实践

    本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...