一、字符流定义及基本用法
InputStream和OutputStream类在读写文件时的操作都是字节
Reader和Writer是作为字符流的顶级父类,也有许多子类
二、字符流操作文件
1、从文件中读数据
package cn.itcast.chapter07.example07;
import java.io.FileReader;
/**
* 使用字符输入流FileReader读取文件中字符
*/
public class Example07 {
public static void main(String[] args) throws Exception {
// 创建一个FileReader对象用来读取文件中的字符
FileReader reader = new FileReader("D:\\IDEA-file\\reader.txt");
int ch; // 定义一个变量用于记录读取的字符
while ((ch = reader.read()) != -1) { // 循环判断是否读取到文件的末尾
System.out.println((char) ch); // 不是字符流末尾就转为字符打印
}
reader.close(); // 关闭文件读取流,释放资源
}
}
输出
i
t
c
a
s
t
2、向文件中写数据
package cn.itcast.chapter07.example08;
import java.io.*;
/**
* 使用FileWriter将字符写入文件
*/
public class Example08 {
public static void main(String[] args) throws Exception {
// 创建一个FileWriter对象用于向文件中写入数据
//1、追加式写入
// FileWriter out=new FileWriter(path,true);
//2、覆盖式写入
FileWriter writer = new FileWriter("D:\\IDEA-file\\writer.txt");
String str = "你好,传智播客";
writer.write(str); // 将字符数据写入到文本文件中
writer.write("\r\n"); // 将输出语句换行
writer.close(); // 关闭写入流,释放资源
}
}
3、通过缓冲流完成文件的复制
使用BufferedReader和BufferedWriter完成文件的复制
BufferedReader中的方法
public String readLine() 读一行字符
BufferedWriter中的方法
public void newLine() 写入一个换行符
package cn.itcast.chapter07.example09;
import java.io.*;
/**
* 使用BufferedReader和BufferedWriter完成文件的复制
*
* BufferedReader中的方法
* public String readLine() 读一行字符
*
* BufferedWriter中的方法
* public void newLine() 写入一个换行符
*/
public class Example09 {
public static void main(String[] args) throws Exception {
// 创建一个BufferedReader缓冲对象,用于读取文件数据
BufferedReader in=new BufferedReader(new FileReader("D:\\IDEA-file\\src.txt"));
// 创建一个BufferedWriter缓冲对象,用于写文件数据
BufferedWriter out=new BufferedWriter(new FileWriter("D:\\IDEA-file\\des.txt"));
String line=null;
// 每次读取一行文本,判断是否到文件末尾
while ((line = in.readLine()) != null) {
out.write(line);
out.newLine(); // 写入一个换行符,该方法会根据不同的操作系统生成相应的换行符
out.flush(); //也可以不写,在关闭数据流时,会自动刷新
}
in.close();
out.close();
}
}
三、转换流
- 前面IO流可以分为字节流和字符流,有时字节流和字符流之间也需要进行转换。在JDK中提供了两个类可以将字节流转换为字符流,分别是InputStreamReader和OutputStreamWriter
- OutputStreamWriter是Writer的子类,它可以将一个字节输出流转换成字符输出流,方便直接写入字符,
- InputStreamReader是Reader的子类,它可以将一个字节输入流转换成字符输入流,
package cn.itcast.example10;
import java.io.*;
/**
* @author wangyue
* @version 1.0
* @date 2019/7/3 10:01
* @describe: 转换流:
*/
public class Example10 {
public static void main(String[] args) throws IOException {
//指定输入流
FileInputStream in = new FileInputStream("D:\\IDEA-file\\src.txt");//创建字节输入流
InputStreamReader isr = new InputStreamReader(in); //将字节输入流转换成字符输入流
BufferedReader br = new BufferedReader(isr); //高效缓冲流包装
//指定输出流
FileOutputStream out = new FileOutputStream("D:\\IDEA-file\\des.txt");//创建字节输出流
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bw = new BufferedWriter(osw);
//读数据
String line = null;
while ((line = br.readLine()) != null) { //是否读到文件末尾
//写数据
bw.write(line);
bw.newLine();
bw.flush();
}
//关闭流
br.close(); //只要关闭最后的缓冲流即可
bw.close();
}
}