package io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class FileReaderDemo {
	public static void main(String[] args) {
		
		String path = "D:\\eclipse\\workspace\\javase\\src\\io\\FileInputStreamDemo.java";
		String outPah = "c:/ganbo.txt";
		
		File f = new File("D:\\eclipse\\workspace\\javase\\src\\io\\FileInputStreamDemo.java");
		File f2 = new File(outPah);
		
		//节点流
		FileInputStream fin = null;
		FileOutputStream fo = null;
		
		//包装流
		InputStreamReader inr = null;
		OutputStreamWriter bpw = null;
		
		//缓冲流
		BufferedReader br = null;
		BufferedWriter bw = null;
		
		
		try {
			//实例化输入流
			fin = new FileInputStream(f);
			inr = new InputStreamReader(fin);
			br = new BufferedReader(inr);
			
			//实例化输出流
			fo = new FileOutputStream(f2);  //注意这里FileOutputStream()还有一个重载的方法,其参数后面加上 true and false 表示是追加还是覆盖写入
			bpw = new OutputStreamWriter(fo);
			bw = new BufferedWriter(bpw);
			
			
			//开始复制
			String temp;
			while((temp=br.readLine())!=null){
				System.out.println(temp);
				
				/**
				 * 注意这里向文件中写出一行,默认一行行尾是没有回车换行的,需要我们手动添加 "\r\n";
				 * \r表示回车,也就是使光标移动到当行的开始位置
				 * \n表示使光标跳到当前行的下一行
				 * 一般就是 : "\r\n" 组合着用,其作用相当于键盘上面的 enter键
				 */
				bw.write(temp+"\r\n");
				bw.flush();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			
			//关闭资源
			if(br!=null){
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}if(bw!=null){
					try {
						bw.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	
		
		
		
	}
}
文件IO流完成文件的复制(复杂版本主要用来演示各种流的用途,不是最佳复制方案哦)
原文:http://www.cnblogs.com/ganbo/p/4081120.html