I/O流里面的字符流

一、什么是字符流?

字符流是由字符组成的,例如 FileReader、FileWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter 等。

在I/O流中,传输的数据类型是字节(Byte)的就是字节流,传输的数据类型是字符(Char)的就是字符流。

二、字符流分类

Reader类字符读取流、BufferedReader

Reader是一个抽象类,它是以字符为单位的输入流的公共父类。

Writer类字符写入流、BufferedWriter

Writer类是Java IO中所有Writer的基类,子类包括BufferedWriter和PrintWriter等等。

三、FileReaer、FileWriter方法

FileReader类从InputStreamReader类继承而来,该类按字符读取流中数据。

方法说明
FileReader(File file)构造方法,在给定从中读取数据的 File 的情况下创建一个新 FileReader
FileReader(FileDescriptor fd)构造方法,在给定从中读取数据的 FileDescriptor 的情况下创建 一个新 FileReader
FileReader(String fileName)构造方法,在给定从中读取数据的文件名的情况下创建一个新 FileReader
int read()读取单个字符,返回一个int型变量代表读取到的字符,返回-1代 表读到文件结尾
int read(char [] c, int offset, int len)读取字符到c数组,返回读取到字符的个数

读取一个文本文件的内容实例:

try(FileReader fr = new FileReader("m.txt")) {
System.out.println(fr.read());
char c = (char)fr.read();
System.out.println(c);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}

FileWriter 类从 OutputStreamWriter 类继承而来,该类按字符向流中写入数据。

方法说明
FileWriter(File file)构造方法,在给出 File 对象的情况下构造一个 FileWriter 对象
FileWriter(File file, boolean append)构造方法,给出 File 对象的情况下构造一个 FileWriter 对象
FileWriter(FileDescriptor fd)构造方法,造与某个文件描述符相关联的 FileWriter 对象
FileWriter(String fileName, boolean append)构造方法,给出 File 对象的情况下构造一个 FileWriter 对象
void write(int c)写入单个字符c
void write(char [] c, int offset, int len)写入字符数组中开始为offset长度为len的某一部分
void write(String s, int offset, int len)写入字符串中开始为offset长度为len的某一部分

将三行字符串,直接写追加到一个文件中实例:

try(FileWriter fw = new FileWriter("m2.txt",true)){
fw.write("hello中\n");
fw.write("hello文\n");
fw.write("java\n");
} catch (IOException e) {
throw new RuntimeException(e);
}

四、BufferedReader、BufferedWriter

BufferedWriter 起始跟 FileWriter 的使用没什么区别,属于字符输出流。

BufferedWriter 更高效,因为它内置有一个长度为 8192 的字符数组,也就是 8K 的字符数组。这样子,如果我们往文件里面写内容的话,如果内容没有填满这个数组,就会自动等待直到我们填满,然后一起写入硬盘。硬盘的运行速度是很慢的。但是我们也可以利用 close() 方法,虽然它可能没有满,但是还是可以强制让它写入硬盘。

除此之外,BufferedWriter 还提供了自动换行的方法 —— newLine() 方法,它会根据操作系统的不一样,自动增添换行符。在实际开发中,如果要换行,就尽量使用 newLine() 方法。

BufferedReader实例:

try(FileReader fr = new FileReader("m.txt");BufferedReader br = new
BufferedReader(fr)){
while(br.ready()){
System.out.println(br.readLine());
}
} catch (IOException e) {
throw new RuntimeException(e);
}

BufferedReader 起始跟 FileReader 的使用没什么区别,属于字符输入流。

BufferedReader 更高效,因为它内置有一个长度为 8192 的字符数组,也就是 8K 的字符数组。这样子,如果我们从文件里面读内容的话,如果内容没有填满这个数组,就会自动等待直到我们填满,然后一起从硬盘读到内存。硬盘的运行速度是很慢的。但是我们也可以利用 close() 方法,虽然它可能没有满,但是还是可以强制让它读入内存。

除此之外,BufferedReader 还提供了读取一整行的方法 —— readLine() 方法。

字符串写入文件实例:

try (FileWriter fw = new FileWriter("m.txt"); BufferedWriter bw = new
BufferedWriter(fw)) {
bw.write("ok");
bw.newLine();
bw.write("java中文字符串");
bw.write("\n123");
} catch (IOException e) {
throw new RuntimeException(e);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值