字符流(父类)抽象类
中文文件写入和读取乱码原因:fileinputstram类和fileoutputstream类是字节的读取和写入,一次处理一个字节,而一个中文字符有三个字节,所以会乱码。
FileReader类:实现文件读取,按照字符逐个读取,可以避免中文乱码
FileWriter类:实现文件写入,按照字符逐个读取,可避免中文乱码。
FileReader类:
package com.tiedandan.IO流.字符流; import java.io.FileInputStream; import java.io.FileReader; public class filereadclass { public static void main(String[] args) throws Exception { FileReader fis = new FileReader("d:\\hello.txt"); int count = 0; while ((count =fis.read())!=-1){ System.out.print((char)count);//filereader读取时按字符读,不会乱码 } fis.close(); } }
FileWriter类:
package com.tiedandan.IO流.字符流; import java.io.FileWriter; import java.io.IOException; public class filewriteclass { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("d:\\hello.txt"); for (int i = 0; i < 5; i++) { fw.write("java世界上最好的语言\r\n"); fw.flush(); } fw.close(); System.out.println("执行完毕!"); } }
字符流复制文件:
package com.tiedandan.IO流.字符流; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; /** * 用字符流实现文件的复制 * 只能复制文本文件,不能复制图片或者二进制文件。 */ public class filecopy { public static void main(String[] args) throws Exception { FileReader fr = new FileReader("d:\\hello.txt"); FileWriter fw = new FileWriter("d:\\hello2.txt"); int count = 0; while ((count=fr.read())!=-1){ fw.write(count); fw.flush(); } fr.close(); fw.close(); System.out.println("执行完毕!"); } }