💁 个人主页:黄小黄的博客主页
❤️ 支持我:👍 点赞 🌷 收藏 🤘关注
🎏 格言:All miracles start from sometime somewhere, make it right now.
本文来自专栏:JavaSE从入门到精通
🐱 较为完整的JavaIO流体系图如下:
本文涉及到Reader字符输入流与Writer字符输出流常用的子类:
FileReader 与 FileWriter均是字符流,即按照字符来操作JavaIO,其继承体系如下图:
✌️ FileReader 构造方法摘要:
⭕️ FileReader 相关方法:
方法名 | 说明 |
---|---|
read() | 每次读取单个字符,返回该字符,如果到文件末尾,则返回-1 |
read(char[]) | 批量读取多个字符到数组,返回读取到的字符数,如果到达文件末尾就返回-1 |
✌️ FileWriter 构造方法摘要:
⭕️ FileWriter 相关方法:
方法名 | 说明 |
---|---|
writer(int) | 写入单个字符 |
writer(char[]) | 写入指定数组 |
writer(char[], off, len) | 写入指定数组的指定部分 |
writer(string) | 写入整个字符串 |
writer(string, off, len) | 写入字符串的指定部分 |
FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件中。
使用FileReader从story.txt读取内容,并在控制台显示。
1️⃣ 单个字符读取方式
import java.io.FileReader;
import java.io.IOException;
/**
* @author 兴趣使然黄小黄
* @version 1.0
* 演示 FileReader 读取 story.txt
*/
public class FileReaderTest {
public static void main(String[] args){
//创建流
FileReader fileReader = null;
int data = 0;
try {
fileReader = new FileReader("D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\story.txt");
//循环读取
while ((data = fileReader.read()) != -1){
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭资源
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2️⃣ 多个字符读取方式
import java.io.FileReader;
import java.io.IOException;
/**
* @author 兴趣使然黄小黄
* @version 1.0
* 演示 FileReader 读取 story.txt
*/
public class FileReaderTest {
public static void main(String[] args){
//创建流
FileReader fileReader = null;
int readLen = 0;
char[] buff = new char[8];
try {
fileReader = new FileReader("D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\story.txt");
//循环读取
while ((readLen = fileReader.read(buff)) != -1){
String str = new String(buff, 0, readLen);
System.out.print(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭资源
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用FileWriter将“奇迹皆有始,当下即行动!”写入到 say.txt 文件中。
⌨️ 参考代码及结果:
import java.io.FileWriter;
import java.io.IOException;
/**
* @author 兴趣使然黄小黄
* @version 1.0
* FileWriter使用案例
*/
public class FileWriterTest {
public static void main(String[] args) {
//创建流
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter("D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\say.txt");
//写入数据
String str = "奇迹皆有始,当下即行动!";
fileWriter.write(str);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
//释放资源
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
BufferedReader继承于Reader
BufferedReader的作用是为其他字符输入流添加一些缓冲功能,是一种处理流也叫包装流。
🐱构造函数
使用BufferedReader读取文件,并显示在控制台
⌨️ 参考代码与结果:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
/**
* @author 兴趣使然黄小黄
* @version 1.0
*/
public class BufferedReaderTest {
public static void main(String[] args) {
//创建缓冲流对象,套接在指定节点流基础上
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(
new FileReader("D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\story.txt"));
//读取文件,按行读取效率高
//到达文件末尾,readLine方法返回null
String line;
while ((line = bufferedReader.readLine()) != null){
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭资源,只需要关闭外层流即可
if (bufferedReader != null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
使用BufferedWriter将“Hello,黄小黄!”写入到hxh.txt文件中。
⌨️ 参考代码与结果:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author 兴趣使然黄小黄
* @version 1.0
* 案例演示
*/
public class BufferedWriterTest {
public static void main(String[] args) {
//创建字符输入缓冲流
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\hxh.txt"));
//内容写入
String str = "Hello, 黄小黄!";
bw.write(str);
//插入换行符
bw.newLine();
} catch (IOException e) {
e.printStackTrace();
} finally {
//释放资源,只需要关闭外层流即可
if(bw != null){
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
如果希望换行,则使用bw.newLine()方法进行操作,该方法会根据系统插入相应的换行符。
采用缓存字符流的方式,复制一份story.txt文件。
🐱 参考代码:
具体见注释
import java.io.*;
/**
* @author 兴趣使然黄小黄
* @version 1.0
* 字符缓存流复制文本文件演示
*/
public class BufferedCopyTest {
public static void main(String[] args) {
String srcFilePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\story.txt";
String destFilePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\story副本.txt";
BufferedReader br = null;
BufferedWriter bw = null;
try {
//创建流对象
br = new BufferedReader(new FileReader(srcFilePath));
bw = new BufferedWriter(new FileWriter(destFilePath));
//读取,边读边写
String line = null;
//readLine 读取一行的内容,但是没有换行符
while ((line = br.readLine()) != null){
bw.write(line);
//插入换行符
bw.newLine();
//刷新
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//释放资源
try {
if (br != null){
br.close();
}
if (bw != null){
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
最后啰嗦一下,本文内容都是关于字符流的,请不要使用字符流对二进制文件进行操作,否则,容易出现读取错误等问题。
🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ !
如果有问题,欢迎私信或者评论区!
共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”