java——缓冲流

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedInAndOutputStream {
	public static void main(String[] args) {
		/**
		 * 缓冲流
		 * 为了提高数据读写的速度,java提供了带缓冲功能的流类,在使用这些
		 * 带缓冲功能的流类时,他会创建一个内部缓冲区的数组。在读取字节或字符
		 * 时,会先把数据源读取到的数据填充该内部缓冲区,然后在返回;在写入字节或字符时,
		 * 会把要写入的数据填充该内部的缓冲区,然后一次性写入目标数据源中。
		 * 
		 * 根据数据操作单位可以把缓冲流分为两类:
		 * BufferedInputStream和BufferedOutputStream:针对字节的缓冲输入和输出流;
		 * BufferedReader和BufferedWriter:针对字符的缓冲输入和输出流
		 * 
		 * 缓冲流都属于过滤流,也就是说缓冲流并不直接操作数据源,而是对直接操作数据源的节点流的一个包装,
		 * 以此增强他的功能。
		 * 
		 * 实例:用缓冲流来改写字符文本文件复制功能
		 * 
		 * 在操作字节文件或字符文件时,建议使用以上介绍的缓冲流,这样程序的效率会更高些。
		 */
		new BufferedInAndOutputStream().BufferedTextCopy("e:/pratice.java", "e:/pratice.txt");
	}
	
	private void BufferedTextCopy(String srcFile, String destFile){
		File src = new File(srcFile);
		File dest = new File(destFile);
		BufferedReader reader = null;
		BufferedWriter writer = null;
		
		if(!src.exists()){
			System.out.println("你输入的文件不存在");
			return;
		}
		
		if(src.isFile() && dest.isFile()){
			try {
				reader = new BufferedReader(new FileReader(src));
				writer = new BufferedWriter(new FileWriter(dest));
				String msg = null;
				while((msg = reader.readLine()) != null){
					//一次写入一行
					writer.write(msg);
					//换行
					writer.newLine();
				}
				writer.flush();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}finally {
				try {
					if(reader!=null){
						//关闭过滤流时,会自动关闭它所包装的底层流
						writer.close();
					}
					if(writer!=null){
						reader.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
				
			}
			
		}
	}
	
	
}

你可能感兴趣的:(java——缓冲流)