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()
如果没有的话,缓冲区中的内容是无法输出的
Java IO(四--字符流基本使用的更多相关文章
- Java IO: 其他字符流(下)
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...
- Java IO之字符流和文件
前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
- [Java IO]03_字符流
Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类. 它的定义如下: public abstra ...
- Java IO编程——字符流与字节流
在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...
- java IO之 字符流 (字符流 = 字节流 + 编码表) 装饰器模式
字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在 ...
- Java——IO类 字符流概述
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- Java IO系统--字符流
字符流:尽管字节流提供了处理任何类型输入/输出操作的足够功能,它们补鞥呢直接操作Unicode字符.字符流层次结构的顶层是Reader和Writer抽象类.类似于InputStream和OutputS ...
- Java IO之字符流
public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("/User ...
- java字节流和字符流,以及java文件操作
A.首先说字节流:1.字节流在操作的时候不会用到缓冲区(也就是内存)2.字节流可用于任何类型的对象,包括二进制对象3.字节流处理单元为1个字节,操作字节和字节数组.InputStream是所有字节输入 ...
随机推荐
- HDU - 1150 Machine Schedule(最小点覆盖数)
1.有两台机器A和B以及N个需要运行的任务.A机器有n种不同的模式,B机器有m种不同的模式,而每个任务都恰好在一台机器上运行.如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则 ...
- spring-boot快速搭建解析
创建方式: 1.在File菜单里面选择 New > Project,然后选择Spring Initializr: 2.使用maven直接构建,添加依赖. 1 2 3 4 pom.xml:Mave ...
- FWT [BZOJ 4589:Hard Nim]
4589: Hard Nim Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 275 Solved: 152[Submit][Status][Disc ...
- Linux网络协议栈(三)——网络设备(2)
2.1.网络设备的注册与注销注册网络设备发生在下列情形: (1)加载网卡驱动程序 网卡驱动程序如果被编译进内核,则它在启动时被初始化,在运行时被作为模块加载.无论初始化是否发生,所以由驱动程序控制 ...
- go语言godep使用命令
godep 看见他的star比govendor,所以我使用它.官方地址 https://github.com/tools/godep install 1 go get github.com/too ...
- Gerrit2安装配置
我主要根据下面这个文章而安装,遇到一些小问题,记录如下:2016.4.30 安装 2.12.2,要将加密的东东全装上!!!注意 1) 由于新的git-bash ...
- C# 混淆 反编译
.net破解一(反编译,反混淆-剥壳) http://www.cnblogs.com/jio92/p/de4dot.html C#学习系列-String与string的区别 http://www.cn ...
- oracle 备份数据
exp AC_SSO/AC_SSO@HB file=d:\wamp\Golden3C_AuthenticationCenter.dmp owner=AC_SSO full=y用户名/密码@服务 exp ...
- React实战之将数据库返回的时间转换为几分钟前、几小时前、几天前的形式。
React实战之将数据库返回的时间转换为几分钟前.几小时前.几天前的形式. 不知道大家的时间格式是什么样子的,我先展示下我这里数据库返回的时间格式 ‘2019-05-05T15:52:19Z’ 是这个 ...
- 【正睿多校联盟Day4 T4 简单的数论题】
题目名有毒 由于并没有系统地开始学习数论,所以数论题基本靠暴力. 然鹅本题的题解相当简单: emmm....我当你没说 一个简单易懂的方法是这样的: 1. 欧拉定理的推论 若正整数a,n互质,则对于任 ...