缓冲流
BufferedWriter BufferedReder
BufferedWriter
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
写入数据:
package io3; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; /** * @author Angus * BufferedWriter * BufferedReder * * 构造: * BufferedWriter(Writer out) */ public class BufferWriterDemo { public static void main(String[] args) throws IOException{ //创建缓冲流对象 FileWriter fw = new FileWriter("a.txt"); BufferedWriter bw = new BufferedWriter(fw); //简化 BufferedWriter bw2 = new BufferedWriter(new FileWriter("b.txt")); //写入数据 bw.write("hello"); bw.flush(); // fw.close();//这个不需要 bw.close(); } } 读取数据;
package io3; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; /** * * @author Angus * 字符缓冲流读取数据 */ public class BufferedReaderDemo { public static void main(String[] args) throws IOException { //创建字字符流对象 BufferedReader br = new BufferedReader(new FileReader("a.txt")); //读取数据 // int ch = 0; // while((ch = br.read()) != -1){ // System.out.print((char)ch); // } char[] chs = new char[1024]; int len = 0; while((len = br.read(chs)) != -1){ System.out.println(new String(chs,0,len)); } } } 创建工具类实现复制文件和图片:
package io3; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * * @author Angus * 工具类 * 复制文本文件,图片等。。。 */ public class Copys { private Copys(){ } /** * 复制文本文件 * @param src * 数据源 * @param dest * 目的地 */ public static void copyFile (String src, String dest) throws IOException{ BufferedReader br = new BufferedReader(new FileReader(src)); BufferedWriter bw = new BufferedWriter(new FileWriter(dest)); char[] chs = new char[1024]; int len = 0; while((len = br.read(chs)) != -1){ bw.write(chs, 0, len); bw.flush(); } bw.close(); br.close(); } /** * 复制二进制文件 * @param src * 数据源 * @param dest * 目的地 * @throws IOException */ public static void copyBinaryData(String src, String dest) throws IOException{ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest)); byte[] chs = new byte[1024]; int len = 0; while((len = bis.read(chs)) != -1){ bos.write(chs, 0, len); } bos.close(); bis.close(); } } 测试;
package io3; import java.io.IOException; /** * @author Angus * */ public class CopysTest { public static void main(String[] args) throws IOException { //需求:复制文本 Copys.copyFile("a.txt", "b.txt"); Copys.copyBinaryData("111.jpg", "222.jpg"); } } 通过复制MP3文件测试缓冲流是否高效
package io3; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 通过复制MP3文件测试缓冲流是否高效 * @author Angus * * 基本字节流一次读写一个字节 * 基本字节流一次读写一个字节数组 * 高效字节流一次读写一个字节 * 高效字节流一次读写一个字节数组 * * 测试发现 高效字节流一次读写一个字节数组最快。。。。。 */ public class CopyMp3 { public static void main(String[] args) throws IOException { long star =System.currentTimeMillis(); // method1(); //基本字节流一次读写一个字节 // method2(); // 高效字节流一次读写一个字节 // method3(); //基本字节流一次读写一个字节数组 method4(); //高效字节流一次读写一个字节数组 long end =System.currentTimeMillis(); System.out.println("共耗时"+(end-star)+"毫秒"); } private static void method1() throws IOException{ FileInputStream fis = new FileInputStream("陈奕迅稳稳的幸福.mp3"); FileOutputStream fos = new FileOutputStream("稳稳的幸福.mp3"); int by = 0; while((by = fis.read()) != -1){ fos.write(by); } fos.close(); fis.close(); //共耗时-11527毫秒 } private static void method2() throws IOException{ BufferedInputStream bis = new BufferedInputStream(new FileInputStream("陈奕迅稳稳的幸福.mp3")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("aa.mp3")); int by = 0; while((by = bis.read()) != -1){ bos.write(by); } bos.close(); bis.close(); //共耗时122毫秒 } private static void method3() throws IOException{ FileInputStream fis = new FileInputStream("陈奕迅稳稳的幸福.mp3"); FileOutputStream fos = new FileOutputStream("bbbb.mp3"); byte[] bys = new byte[1024]; int len = 0; while((len = fis.read(bys)) != -1){ fos.write(bys, 0, len); } fos.close(); fis.close(); //共耗时78毫秒 } private static void method4() throws IOException{ BufferedInputStream bis = new BufferedInputStream(new FileInputStream("陈奕迅稳稳的幸福.mp3")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("cccc.mp3")); byte[] bys = new byte[1024]; int len = 0; while((len = bis.read(bys)) != -1){ bos.write(bys, 0, len); } bos.close(); bis.close(); //共耗时68毫秒 } } 字符缓冲流的特殊功能
package io3; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * @author Angus * BufferedWriter * newLine() 写入一个行分隔符。 * 写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行 ('\n') 符。 * BufferedReader * readLine() 读取一个文本行。 * 读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。 */ public class BufferedStringDemo { public static void main(String[] args) throws IOException{ //写数据 BufferedWriter bw = new BufferedWriter(new FileWriter("at.txt")); for (int i = 0; i < 5; i++) { bw.write("hello"+i); // bw.write("\r\n"); //改进: bw.newLine(); bw.flush(); } bw.close(); //读取数据 BufferedReader br = new BufferedReader(new FileReader("at.txt")); String line = null; while((line = br.readLine()) != null){ System.out.println(line); } } } 如何改名和复制目录:
先改名后复制
先复制后改名
改名代码demo;
package io3; import java.io.File; /** * @author Angus * 如何对文件改名 * */ public class ChangeNamedemo { public static void main(String[] args) { File file = new File("a.txt"); File file2 = new File("cc.txt"); //public boolean renameTo(File dest) System.out.println(file.renameTo(file2)); //true } } ok ,下面开始正式操作
package io3; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; import org.omg.PortableInterceptor.ObjectIdHelper; /** * @author Angus * 编写一个程序吧一个目录下的.java 文件复制到别的目录,并修改扩展名.jad * * A; 封装目录 * B:获取满足的File[]数组 * C:遍历数组得到每一个File类 * D:复制文件 * 复制后改名 * 复制前改名 */ public class CopyFolder { public static void main(String[] args) throws IOException{ File file = new File("d:\\aaa"); File[] listFiles = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return new File(dir, name).isFile() && name.endsWith(".java"); } }); //判断目录是否存在 不存在创建 File destFile = new File("d:\\aa"); if(!destFile.exists()){ destFile.mkdir(); } //遍历 for (File file2 : listFiles) { String name = file2.getName(); String newName = name.replaceAll(".java", ".jad"); File newFile = new File(destFile,newName); //复制 BufferedReader br = new BufferedReader(new FileReader(file)); BufferedWriter bw = new BufferedWriter(new FileWriter(newFile)); String line =null; while((line = br.readLine()) != null){ bw.write(line); bw.newLine(); bw.flush(); } bw.close(); br.close(); } } } 先复制后改名类似。。。。。
