一. Writer
输出字符流,主要用于操作字符, 往文件里面写入字符。常常用其子类 FileWriter
一.一 Writer 接口方法
String 类实现了 CharSequence 接口。
一.二 FileWriter 子类
一.二.一 构造方法
一.二.一.一 方法
也是有 传入文件 和传入文件路径两种形式。 通常采用传入 文件的形式。 如果文件不存在,也同样会创建的。
一.二.一.二 演示
@Test public void conTest() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"wz.txt"); //传入文件 Writer writer1=new FileWriter(file); String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"wz.txt"; //传入文件路径 Writer writer2=new FileWriter(path); }
一.二.二 写入和关闭等方法
重写父类的方法, 主要是 write(),append() 方法。
一.三 FileWriter 写入文件
一.三.一 write() 写入
老蝴蝶综合简化一下, 包括以前的写入单个,写入数组,换行,写入中文。
@Test public void write1Test() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"wz.txt"); Writer writer=new FileWriter(file,true); //写入单个,会转换成字符,并不是数字。 writer.write(65); //写入字符数组 char[] chars="Hello,My Name is TwoButterfly".toCharArray(); writer.write(chars); //写入字符数组的部分形式 // writer.write(chars,0,3) //直接写入字符串 writer.write("\r\n"); writer.write("Hello,My Name is TwoButterfly"); //写入字符串的部分形式 //writer.write("Hello ",0,5); //换行 writer.write("换行\r\n"); //写入中文 writer.write("新的一行"); writer.close(); }
运行程序,打开文件系统:
一.三.二 append() 链式写入
@Test public void appendTest() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"wz.txt"); Writer writer=new FileWriter(file,true); writer.append("\r\n"); String str="我是追加写入的字符串"; //链式写入 writer.append(str).append("\r\n").append(str,0,3); writer.close(); }
运行程序,查看 wz.txt 文件内容
为了保持写入文件一致,通常采用 write()的形式。
二. Reader
Reader 用于读取文件,字符方式读取。 故一般只读取文本格式的文件,不用于读取图片,视频等格式文件。
二.一 Reader 接口方法
二.二 FileReader 类
二.二.一 构造方法
二.二.一.一 方法
建议传入文件。
二.二.一.二 演示
//构造 @Test public void conTest() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"wz.txt"); //传入文件 Reader reader=new FileReader(file); String path="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"wz.txt"; //传入路径 Reader reader1=new FileReader(path); }
二.二.二 读取和关闭方法
主要是实现 接口 Reader 里面的 read() 方法
二.三 Reader 读取文件内容
二.三.一 write() 读取单个字符和读取字符数组
@Test public void readTest() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"wz.txt"); Reader reader=new FileReader(file); int c=reader.read(); System.out.println("读取单个:"+(char)c); char[] chars=new char[1024]; //读取多个到字符数组 int len= reader.read(chars); System.out.println("输出内容:"+new String(chars,0,len)); reader.close(); }
控制台打印输出:
发现,是没有乱码的。
二.三.二 循环读取
@Test public void read2Test() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"wz.txt"); Reader reader=new FileReader(file); StringBuilder sb=new StringBuilder(); char[] chars=new char[1024]; int len=-1; while((len= reader.read(chars))!=-1){ String temp= new String(chars,0,len); sb.append(temp); } //读取多个到字符数组 System.out.println("输出内容:"+sb.toString()); reader.close(); }
运行程序,控制台打印输出:
字符方式读取,是不会存在中文乱码问题的。