课程笔记Day19
- 字符文件流
- 转换流
- 字符缓冲流
第一章 字符文件流
第01节 基础理论
为什么需要使用字符流呢?
因为字节流操作文本文件的时候,容易出现 中文乱码问题。这种情况下,我们需要使用字符流。
例如:
将文本文件的数据,读取到控制台当中,展示结果(采用字节流)
编码表
介绍公式
char = byte + 编码表;
字符 = 字节(0和1) + 编码表;
//字符流的由来就是 字节流和编码表的组合。
第02节 FileWriter
字符文件输出流 FileWriter
构造方法
方法API | 方法说明 |
---|---|
FileWriter(String) | 参数1:文件的路径 |
FileWriter(String,boolean) | 参数1:文件的路径 参数2:是否开启追加写,默认false |
FileWriter(File) | 参数1:文件的对象 |
FileWriter(File,boolean) | 参数1:文件的对象 参数2:是否开启追加写,默认false |
常用方法,来自于父类的方法
方法API | 方法说明 |
---|---|
void write(int) | 参数1:写入的字符数据 |
void write(char[]) | 参数1:写入的字符数组数据 |
void write(char[],int,int) | 参数1:写入的字符数组数据,参数2:开始索引,参数3:写几个数据 |
void write(String) | 参数1:写入的字符数组数据 |
void write(String,int,int) | 参数1:写入的字符数组数据,参数2:开始索引,参数3:写几个数据 |
void flush() | 刷新流对象,将内存当中的数据刷新到硬盘当中 |
void close() | 这里的 close()方法表示断开和操作系统之间的关联关系 |
第03节 FileReader
字符文件输入流 FileReader
构造方法
方法API | 方法说明 |
---|---|
FileReader(String) | 参数1:文件的路径 |
FileReader(File) | 参数1:文件的对象 |
常用方法
方法API | 方法说明 |
---|---|
int read() | 一次读取一个字符,返回字符对应的整数值 |
int read(int[]) | 一次读取一个字符数组,返回读取到的字符数组有效长度 |
int read(char[],int,int) | 一次读取一个字符数组的一部分,返回读取到的字符数组有效长度 |
void close() | 释放资源,断开程序和操作系统之间的关联关系 |
第二章 转换流
第01节 OutputStreamWriter
//目标:学习OutputStreamWriter的快速入门
@SuppressWarnings("all")
public class Test01 {
public static void main(String[] args) throws IOException {
String path = "JavaSEDay19\\dir\\测试04.txt";
//1.创建对象
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(path),"GBK");
//2.读写数据
osw.write("定浩和腚耗");
osw.flush();
//3.释放资源
osw.close();
}
}
第02节 InputStreamReader
//目标:学习 InputStreamReader 的快速入门
public class Test02 {
public static void main(String[] args) throws IOException {
String path = "JavaSEDay19\\dir\\测试03.txt";
//1.创建对象
InputStreamReader isr = new InputStreamReader(new FileInputStream(path),"GBK");
//2.读写数据
int ch;
while((ch = isr.read())!=-1){
System.out.print((char)ch);
}
//3.释放资源
isr.close();
}
}
第03节 编码转换
将一个 gbk 格式的文件,转换成 utf-8格式。
分析:
原始文件 gbk 格式 ---【InputStreamReader】---> 读取到程序当中 --【OutputStreamWriter】--> 目标文件 utf-8格式
注意:
之前是什么格式的文件,读取的时候,就需要采用什么编码。
写出的过程,需要转换编码。
读:gbk
写:utf-8
代码
//练习:编码转换 GBK --> UTF-8
@SuppressWarnings("all")
public class Test03 {
public static void main(String[] args) throws IOException {
String spath = "C:\\Users\\chenhaochuan\\Desktop\\新建文件夹\\hello.txt";
String dpath = "JavaSEDay19\\dir\\目标文件03.txt";
//1.创建对象
InputStreamReader isr = new InputStreamReader(new FileInputStream(spath),"GBK");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(dpath),"UTF-8");
//2.读写数据
int ch;
while ((ch = isr.read())!=-1){
osw.write(ch);
osw.flush();
}
//3.释放资源
isr.close();
osw.close();
}
}
第三章 字符缓冲流
第01节 BufferedWriter
字符缓冲输出流 BufferedWriter
构造方法
方法API | 方法说明 |
---|---|
BufferedWriter(Writer) | 参数1:字符输出流的对象 |
BufferedWriter(Writer,int) | 参数1:字符输出流的对象,参数2:缓冲区大小 |
常用方法
方法API | 方法说明 |
---|---|
void write(String) | 参数:字符串 |
void newLine() | 写换行符,不区分操作系统 |
void flush() | 刷新IO流 |
void close() | 释放资源 |
第02节 BufferedReader
字符缓冲输入流 BufferedReader
构造方法
方法API | 方法说明 |
---|---|
BufferedReader(Reader) | 参数1:字符输入流的对象 |
BufferedReader(Reader,int) | 参数1:字符输入流的对象 参数2:缓冲区的大小 |
常用方法
方法API | 方法说明 |
---|---|
String readLine() | 一次性读取一行数据,不会读取换行符 |
void close() | 释放资源,断开和操作系统之间的关联 |
第03节 复制文件案例
//练习:采用字符缓冲流实现文件复制代码(重点)特殊方法
@SuppressWarnings("all")
public class Test03 {
public static void main(String[] args) throws IOException {
String spath = "JavaSEDay19\\dir\\测试05.txt";
String dpath = "JavaSEDay19\\dir\\目标文件04.txt";
//1.创建对象
BufferedReader br = new BufferedReader(new FileReader(spath));
BufferedWriter bw = new BufferedWriter(new FileWriter(dpath));
//2.读写数据
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine(); //换行
bw.flush(); //刷新
}
//3.释放资源
br.close();
bw.close();
}
}
第04节 同文反转案例
//题目:同文反转【正确的写法】
@SuppressWarnings("all")
public class Test05 {
public static void main(String[] args) throws IOException {
String path = "JavaSEDay19\\dir\\hello.txt";
//1. 将文件的数据读取到集合当中
BufferedReader br = new BufferedReader(new FileReader(path));
ArrayList<String> array = new ArrayList<>();
//读取数据
String line;
while((line = br.readLine())!=null){
array.add(line);
}
br.close();
//2. 将集合的数据写回到文件当中
BufferedWriter bw = new BufferedWriter(new FileWriter(path));
//循环遍历集合,准备写数据
for (String s : array) {
//反转操作
StringBuilder sb = new StringBuilder(s);
String str = sb.reverse().toString();
//写回数据
bw.write(str);
bw.newLine(); //换行
bw.flush(); //刷新
}
bw.close();
}
}
//循环遍历集合,准备写数据
for (String s : array) {
//反转操作
StringBuilder sb = new StringBuilder(s);
String str = sb.reverse().toString();
//写回数据
bw.write(str);
bw.newLine(); //换行
bw.flush(); //刷新
}
bw.close();
}
}