🧭Java IO流学习 🎉 内容回顾 Java IO流介绍及文件操作 Java IO字符流 📢今天我们进行Java IO字符流的学习,感谢你的阅读,内容若有不当之处,希望大家多多指正,一起进步!!! ??如果觉得博主文章还不错,可以👍三连支持?一下哦😀
Java IO字符流
字符流
字符流介绍
字符流 封装了更加适合操作文本字符的方法
字符流顶层抽象类
Reader :字符输入流超类 Writer :字符输出流超类
字符流 传输单位是字符(在UTF-8编码中一个中文字符占3个字节24bit) Reader 和Writer 都属于字节流的超类,也是抽象类,需要子类来实现实例化,Java API中所有以这两个类为后缀名的类都属于字符流 例如:FileReader 、FileWriter 分别为 文件字符输入流和文件字符输出流 。
字符输入流Reader
public abstract class Reader implements Readable, Closeable
Reader 是Java中IO库提供的另一个输入流接口。和InputStream的区别: InputStream是一个字节流,以byte为单位读取,而Reader是一个字符流,以char为单位读取,主要用来读取文本字符。
FileReader
以实现类FileReader为例介绍字符输入流
构造函数
public FileReader(String fileName) throws FileNotFoundException {
super(new FileInputStream(fileName));
}
public FileReader(File file) throws FileNotFoundException {
super(new FileInputStream(file));
}
当传入的文件不存在的时候,运行会抛出FileNotFoundException 异常。
read方法
以读取电脑上info.txt文件为例,路径为: “e:\Java\info.txt”。
1. int read() 每次读取一个字符 返回类型是int,范围0~65535,如果读取到文件结尾:返回 -1 代码示例
@Test
public void fileReader01() {
String filePath = "e:\\Java\\info.txt";
FileReader fileReader = null;
try {
fileReader = new FileReader(filePath);
int read = 0;
while ((read = fileReader.read()) != -1) {
System.out.print((char) read);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果: 2. int read(char cb[]) 将输入流读取到char数组中返回结果表示读取的数据个数,如果读取到文件结尾,返回 -1 代码示例
@Test
public void fileReader02() {
String filePath = "e:\\Java\\info.txt";
FileReader fileReader = null;
try {
fileReader = new FileReader(filePath);
char[] chars = new char[3];
int readLength = 0;
while ((readLength = fileReader.read(chars)) != -1) {
System.out.print((new String(chars,0,readLength)));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果: 3. int read(char cbuf[], int offset, int length) 批量读取数据, 将数据读取到char数组中,从offset位置开始,读取length长度范围:offset + length <= cbuf.length 返回值表示数据的个数 如果读取到文件结尾,返回 -1 代码示例
@Test
public void fileReader03() {
String filePath = "e:\\Java\\info.txt";
FileReader fileReader = null;
try {
fileReader = new FileReader(filePath);
char[] chars = new char[3];
int readLength = 0;
while ((readLength = fileReader.read(chars,0,chars.length)) != -1) {
System.out.print((new String(chars,0,readLength)));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:
字符输出流Writer
public abstract class Writer implements Appendable, Closeable, Flushable
Writer 是字符输出流,和OutputStream类似,不同点在于OutputStream是操作byte字节流,Writer是操作char字符流 实现Appendable 接口,使该类具有内容追加功能 实现Flushable 接口,该类具有flush功能,强制将缓冲数据刷入磁盘或发送至网络
FileWriter
构造方法
覆盖模式,相当于流的指针在首端
FileWriter(File/String)
追加模式,相当于流的指针在尾端
FileWriter(File/String,true)
write方法
以往电脑上java.txt文件写入数据为例,路径为: “e:\Java\java.txt”。
🚀 【注意】 FileWriter 使用后,必须要 关闭 (close)或者 刷新 (flush),否则写入不到指定的文件!!!
1. void write(int c) 每次写入单个字符 代码示例
@Test
public void FileWriter01() {
String filePath = "e:\\Java\\java.txt";
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(filePath);
fileWriter.write('a');
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileWriter != null) {
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果: 2. void write(char cbuf[]) 写入字符数组 代码示例
@Test
public void FileWriter02() {
String filePath = "e:\\Java\\java.txt";
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(filePath);
char[] chars = {'h','e','l','l','o'};
fileWriter.write(chars);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileWriter != null) {
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
3. void write(char cbuf[], int off, int len) 写入字符数组的指定部分,从off位置开始,读取len长度写入 代码示例
@Test
public void FileWriter03() {
String filePath = "e:\\Java\\java.txt";
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(filePath);
char[] chars = {'天','下','第','一'};
fileWriter.write(chars,2,2);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileWriter != null) {
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
4. void write(String str) 写入字符串到字符输出流 代码示例
@Test
public void FileWriter04() {
String filePath = "e:\\Java\\java.txt";
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(filePath);
String str = "你好,Java~~~";
fileWriter.write(str);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileWriter != null) {
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
5. void write(String str, int off, int len) void write(String str, int off, int len)写入字符串数组,从off位置开始,写入len长度
代码示例
@Test
public void FileWriter05() {
String filePath = "e:\\Java\\java.txt";
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(filePath);
String str = "你好,Java~~~";
fileWriter.write(str,0,2);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileWriter != null) {
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果: append方法 append 方法,追加内容,例如往java.txt文件中追加内容,路径为: “e:\Java\java.txt”。
代码示例
@Test
public void FileWriter06() {
String filePath = "e:\\Java\\java.txt";
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(filePath);
fileWriter.write('a');
fileWriter.append('b').append('c').append('d');
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileWriter != null) {
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
|