虽然转换流可以按照指定的字符集读写文本文件,但是转换流读写文本文件代码写起来还是比较麻烦。如果你读写的文件是UTF-8编码格式,Java还给我们提供了两个读写字符文件的便捷类FileReader和FileWriter来简化代码的书写。
FileReader读文件
读取C:\io\a.txt
文件【UTF-8格式】的所有字符
public class FileReaderDemo1{
public static void main(String[] args){
//创建流对象
FileReader fr=new FileReader("C:\\io\\a.txt");
//一次读取多个字符
char[] chs=new char[1024];
int len;//记录每次读取的字符个数
while((len=fr.read(bs))!=-1){
String str=new String(chs,0,len);
System.out.print(str);
}
//释放资源
fr.close();
}
}
FileWriter写文件
往C:\io\\b.txt
文件【UTF-8格式】中写字符数据
public class FileReaderDemo1{
public static void main(String[] args){
//创建输出流对象
FileWriter fw=new FileWriter("C:\\io\\b.txt");
//写一个字符串
fw.write("www.itheima.com");
//写一个换行
fw.write("\r\n");
//写一个字符数组
char[] chs={'中','国','A','a','9'}
fw.write(chs);
//写一个字符数组的前2位
fw.write(chs,0,2);
//释放资源
fw.close();
}
}
字符流复制文件
把C:\io\a.txt
文件中【UTF-8格式】的所有内容复制到C:\io\b.txt
文件中【UTF-8格式】
public class CopyDemo1{
public static void main(String[] args){
//创建流对象
FileReader fr=new FileReader("C:\\io\\a.txt");
//创建输出流对象
FileWriter fw=new FileWriter("C:\\io\\b.txt");
//一次读取多个字符
char[] chs=new char[1024];
int len;//记录每次读取的字符个数
while((len=fr.read(bs))!=-1){
//一次写人多个字符
fw.write(chs,0,len);
}
//释放资源
fw.close();
fr.close();
}
}
字符缓冲流
字符缓冲流是基于另一个字符流做一些功能增强,并且在内部创建一个缓冲区数组,来提高读写的效率。
BufferedReader可以对Reader的子类进行功能增强,提高读取字符的效率;
BufferedWriter可以对Writer的子类进行功能增强,提高写入字符的效率。
一次复制多个字符
我们以复制文本为例,把C:\io\a.txt
文件中的字节复制到C:\io\b.txt
文件中
public class CopyDemo2{
public static void main(String[] args){
//创建流对象
BufferedReader br=new BufferedReader(new FileReader("C:\\io\\a.txt"));
//创建输出流对象
BufferedWriter bw=new BufferedWriter(new FileWriter("C:\\io\\b.txt");
//一次读取多个字符
String line;
String len;//记录每次读取的字符个数
while((len=br.readLine())!=null){
//一次写人多个字符
bw.write(line);
bw.newLine();
bw.flush(); //刷新(可以省略)
}
//释放资源
bw.close();
bw.close();
}
}
一次复制一行字符
字符缓冲流除了可以使用Reader和Writer的基本方法之外,还提供了写两个特有方法,readLine()
和newLine()
readLine() 读取文件中的一行(不包括换行符)
newLine() 写一个换行符(能跨平台)
我们以复制文本为例,把C:\io\a.txt
文件中的字节复制到C:\io\b.txt
文件中
public class CopyDemo2{
public static void main(String[] args){
//创建流对象
BufferedReader br=new BufferedReader(
new FileReader("C:\\io\\a.txt"));
//创建输出流对象
BufferedWriter bw=new BufferedWriter(
new FileWriter("C:\\io\\b.txt");
//一次读取多个字符
char[] chs=new char[1024];
int len;//记录每次读取的字符个数
while((len=br.read(bs))!=-1){
//一次写人多个字符
bw.write(chs,0,len);
}
//释放资源
bw.close();
bw.close();
}
}