Java IO(四--字符流基本使用

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

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

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

posted @ 2019-06-19 15:53  Diamond-Shine  阅读(330)  评论(0编辑  收藏  举报