字符流/节点流(FileReader、FileWriter)
上一篇字符流(InputStreamReader、OutputStreamWriter) - 鹿先森JIAN - 博客园 (cnblogs.com)对纯文本文件txt的读写复制操作,可针对不同编码进行转换设置。如果是默认的读写的文本文件的编码要与当前环境的编码兼容,可采用以下更简便的方法去写:
FileReader 是字符流,输入流,节点流。用来以字符为单位读取文件内容
FileWrtier 是字符流,输出流,节点流。用来以字符为单位把数据保存到文件中
注意:
以 Reader 结尾的这些字符流只能读写纯文本文件txt
FileReader、FileWriter 读写的文本文件的编码要与当前环境的编码兼容
--------------------------------------------------
FileReader
- FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader
- FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader
//使用FileReader读取文本文件的内容 public class Test01 { public static void main(String[] args) throws IOException { //1)建立流通道 //out.txt文件是GBK编码,以FileReader读取,汉字会出现乱码 // FileReader fr = new FileReader("D:\\yexiao1793\\file\\out.txt"); //Test02.txt文件中既有中文又有英文, 该文件是以UTF-8编码的 FileReader fr = new FileReader("D:\\yexiao1793\\file\\Test02.txt"); //2)逐个字符读取. read()一次读取一个字符,返回字符的码值,如果读取文件末尾返回-1 int cc = fr.read(); while (cc != -1 ){ System.out.print( (char)cc ); cc = fr.read(); } //3)关闭 fr.close(); } }
FileWriter
- FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象
- FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象
// FileWriter 把字符保存到文件中 public class Test02 { public static void main(String[] args) throws IOException { //1)以覆盖的方式建立流通道,如果文件已存在,会覆盖文件原来的内容.如果文件不存在,会创建的新文件且编码格式就是UTF-8编码 FileWriter fw = new FileWriter("D:\\yexiao1793\\file\\out3.txt"); // out.txt文件已存在, 并且是GBK编码, 以覆盖的方式打开,会把文件编码更改为UTF-8 // FileWriter fw = new FileWriter("D:\\yexiao1793\\file\\out.txt"); // out.txt文件已存在, 并且是GBK编码, 以追加的方式打开,写入文件中的汉字会变为乱码 // FileWriter fw = new FileWriter("D:\\yexiao1793\\file\\out.txt", true ); fw.write('汉'); fw.write('字'); fw.write( 98 ); fw.write( 30098 ); fw.write('\r'); fw.write('\n'); fw.write("hello动力节点".toCharArray()); fw.write("\r\n还可以直接写一个字符串"); fw.close(); } }
--------------------------------------------
//文本文件的复制 public class Test03 { public static void main(String[] args) { String srcFile = "D:\\yexiao1793\\code\\day0901\\src\\filereaderwriter\\Test03.java"; // 源文件 String destFile = "d:/yexiao1793/file/test03.java"; // 新位置 copyTextFile(srcFile, destFile); } //文本文件复制,使用字符数组作为容器,自动关闭流 private static void copyTextFile(String srcFile, String destFile) { try ( FileReader reader = new FileReader(srcFile); FileWriter writer = new FileWriter(destFile); ) { char [] contents = new char[1024*4]; int len = reader.read(contents); // 以字符数组方式读写 while (len != -1 ){ writer.write(contents, 0, len); len = reader.read(contents); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //文本文件复制,逐个字符复制,手动关闭流 private static void copyTextFile1(String srcFile, String destFile) { FileReader reader = null; FileWriter writer = null; try { reader = new FileReader(srcFile); writer = new FileWriter(destFile); int cc = reader.read(); while( cc != -1){ writer.write(cc); cc = reader.read(); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null ) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (writer!=null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } }