Writer类与Reader类是以字符流传输数据,一个字符是两个字节
字符流除了是以字符方式(两个字节)传输数据外,另外一点与字节流不同的是字符流使用缓冲区,通过缓冲区再对文件进行操作。字节流字节对文件进行操作。使用字符流类时关闭字符流会强制将字符流缓冲区的类容输出,如果不想关闭也将字符流进行输出,使用Writer类的flush()方法。
字符流的输出与输入操作
import java.io.File; import java.io.IOException; import java.io.Writer; import java.io.FileWriter; import java.io.Reader; import java.io.FileReader; public class Test { public static void main(String[] args) { try{ //使用Writer类可以直接输出字符串 FileWriter out = new FileWriter("e:\java\io.txt"); String str = "你好世界Hello Word!"; String str1 = "你好世界Hello Word!!"; out.write(str); out.write(" " + str1);//为什么out.write(" + str1")不能实现转行? out.close(); }catch(IOException e) { e.printStackTrace(); } try{ //在文件后追加写入一个字符串 Writer out = new FileWriter("e:\java\io.txt",true); String str = " 你好世界Hello Word!!!"; out.write(str); out.close(); Reader in = new FileReader("e:\java\io.txt"); int b; while ((b = in.read()) != -1) { System.out.print((char)b);//字符流传输数据是两个直接,中文可以正确显示出来。 } in.close(); }catch(IOException e) { e.printStackTrace(); } } }
缓存区的操作
import java.io.File; import java.io.IOException; import java.io.Writer; import java.io.FileWriter; import java.io.FileOutputStream; public class Test { public static void main(String[] args) { try{ String str = "e:\java\bbb.txt"; File f = new File(str); FileWriter out = new FileWriter(f); out.write("Hello Word!"); out.flush();//将缓存区输出 out.close(); }catch(IOException e) { e.printStackTrace(); } } }