java基础学习IO流之缓冲流 十一 -5

缓冲流

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();
		}
		
	}

}

先复制后改名类似。。。。。

最后附上JDK使用文档API 下载








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值