🧭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;
//循环读取 使用 read, 单个字符读取
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;
//循环读取 使用 read(buf), 返回的是实际读取到的字符数
//如果返回-1, 说明到文件结束
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;
//如果返回-1, 说明到文件结束
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();
}
}
}
运行结果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95511.html