字符流:只能操作文本文件,与字节流的区别是,字节流是按照字节来读取文件,而字符流是按照字符来读取,因此字符流的局限性为文本文件
字符输出流:Write类,使用时通过子类 每一次写入都要刷新
package com.zs;import java.io.FileWriter; import java.io.IOException;public class Demo3 {public static void main(String[] args) throws IOException {FileWriter fw=new FileWriter("d:\\c.txt");fw.write(101);//输入数字自动编码fw.flush();//字符流每次操作都要使用flush方法刷新char[] ch={'a','b','c'};fw.write(ch);//输入数组,写字符数组 fw.flush();fw.write(ch,0,2);//写部分字符数组选则的字符fw.write("hello java");//可以直接写字符串 fw.close();} }
字符输入流:Reader类,通过子类
package com.zs.Demo2;import java.io.FileReader; import java.io.IOException;public class Demo2 {public static void main(String[] args) throws IOException {FileReader fr=new FileReader("d:\\c.txt");int len=0;while((len=fr.read())!=-1){//一个字符一个字符的读System.out.println((char)len);}fr.close();FileReader fr1=new FileReader("d:\\c.txt");char[] c=new char[1024];//用字符数组读数据,加快速度while((len=fr1.read(c))!=-1){System.out.println(new String(c,0,len));}fr.close();} }
复制文件:与字节流相似,需要注意每次写入后都要刷新
package com.zs.Demo2;import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;public class CopyFileByChar {public static void main(String[] args) {FileReader fr=null;FileWriter fw=null;try {fr=new FileReader("d:\\c.txt");fw=new FileWriter("e:\\c.txt");int len;char[] c=new char[1024];while((len=fr.read(c))!=-1){fw.write(c,0,len);
fw.flush();}} catch (IOException e) {throw new RuntimeException("复制失败");}finally {if (fw != null) {try {fw.close();} catch (IOException e) {throw new RuntimeException("释放资源失败");}finally {if (fr != null) {try {fr.close();} catch (IOException e) {throw new RuntimeException("释放资源失败");}}}}}} }
转换流:字符流和字节流之间的桥梁
OutputStreamWriter类:字符转字节
package com.zs.Demo2;import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter;public class CharToByte {public static void main(String[] args) throws IOException {FileOutputStream fo=new FileOutputStream("d:\\d.txt");//OutputStreamWriter(字节流对象,编码格式);OutputStreamWriter fw=new OutputStreamWriter(fo,"utf-8");fw.write("你好");//这里本来d盘时字节流输入的,可以使用字符流输入字符串; fw.close();} }
InputStreamReader:字节转字符
package com.zs.Demo2;import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader;public class ByteToChar {public static void main(String[] args) throws IOException {FileInputStream fi=new FileInputStream("d:\\d.txt");InputStreamReader fr=new InputStreamReader(fi,"utf-8");char[] c=new char[1024];int len=0;while((len=fr.read(c))!=-1){System.out.println(new String(c,0,len));//你好 }} }
注意读取文本的编码格式要一致