10.0、Java_IO流 - 字符输入输出流、字符流文件拷贝
文件字符流:
前面介绍的文件字节流可以处理所有的文件,如果我们处理的是文本文件,也可以使用文件字符流,他以字符为单位进行操作;
字符流和字节流相似,字节流中的 read() 方法是一次读一个字节,而字符流里的 read() 方法一次读一个字符,返回的是当前字符的 Unicode 编码;
示例代码,如下所示 ->
public class FileDemo7 {public static void main(String[] args) throws IOException {FileReader fr = new FileReader("D:/text1.txt");FileWriter fw = new FileWriter("D:/text2.txt");int tmp = 0;//每次读取一个字符while((tmp = fr.read()) != -1) {//输出Unicode编码System.out.println(tmp);//将返回的Unicode编码转为字符输出System.out.println((char)tmp);}//在Windows中\r\n 表示回车换行fw.write("缓缓飘落的枫叶像思念\r\n");fw.write("我点燃烛火温暖岁末的秋天\r\n");fw.write("极光掠夺天边\r\n");fw.write("北风掠过想你的容颜");fw.flush();//如果在这后面重新创建一个字符输出流对象,//然后通过这个对象在 text2.txt 文件中输入内容,新内容则会覆盖掉原来的内容FileWriter fw2 = new FileWriter("D:/text2.txt");fw2.write("内容覆盖");//如果不行覆盖而是追加内容,如下所示 ->FileWriter fw3 = new FileWriter("D:/text2.txt",true);fw3.write("追加内容");fr.close();fw.close();}
}
利用字符缓冲区实现文件拷贝 ↓↓↓
字符流和字节流一样,也可以利用缓冲区来提高读写效率,只不过字节流中定义的缓冲区是 byte[ ] 数组,并且长度可以通过 availabl() 方法来估计文件的大小自动去设置缓冲区长度;字符缓冲区要用 char[ ] 数组,而且只能自定义长度;不过长度都必须是 2 的整数次幂才可以;
示例代码,如下所示 ->
public class FileCopyUtil {/*** 利用数据缓冲区来文件拷贝* @param url 源文件 绝对路径* @param dest 目标文件 绝对路径*/public static void fileCopy(String url,String dest) throws IOException {FileReader fr = new FileReader(src);FileWriter fw = new FileWriter(dest);char[] buff = new char[1024];int tmp = 0;//read()返回的是字符的 Unicode 编码//read(char[]) 方法返回的就不是 Unicode 编码了,而是读取字节到缓冲区的长度while((tmp = fr.read(buff)) != -1) {fw.write(buff,0,tmp);}fw.flush();fr.close();fw.close();}
}