java种复制文件的N种方法

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

import javax.sql.rowset.CachedRowSet;
/*
 * IO流分类:
 * 			流向分类
 * 					输入流	读取数据	FileReader	Reader
 * 					输出流	写出数据	FileWriter	Writer
 * 			
 * 
 * 		      数据类型分类
 * 					字节流	
 * 							字节输入流		读取数据	InputStream
 * 							字节输出流		写出数据	OutputStream
 * 					字符流
 * 							字符输入流		读取数据	Reader
 * 							字符输出流		写出数据	Writer
 */
public class Work05 {
    //	通过字符流复制一个文本文件
	public static void main(String[] args) throws IOException {
		// 源目录
		File src = new File("6.jpg");
		//目标目录
		File dest = new File("bb.txt");
		//copy01(src, dest);
		//copy02(src, dest);
//		copy03(src, dest);
//		copy04(src, dest);
//		copy05(src, dest);
		copy06(src, dest);
	}
	//  第7种: 字节流的复制方法和字符流的复制方法相同(不做统一演示)
	@SuppressWarnings("resource")
	private static void copy06(File src, File dest) throws IOException {
		//创建字节输入流	
		FileInputStream in = new FileInputStream(src);
		//创建字节输出流	
		FileOutputStream  out= new FileOutputStream(dest);
		int len;
		//定义byte数组
		byte[] by=new byte[024];
		while((len=in.read(by))!=-1){
			out.write(by, 0, len);
			out.flush();
		}
		
		in.close();
		out.close();
		
		
		
		
	}

	//第五种:创建FileReader对象通过字符     复制一个文本文件(一次读一个数组)
	@SuppressWarnings("resource")
	private static void copy05(File src, File dest) throws IOException {
		//创建输入流对象
		FileReader fr = new FileReader(src);
		//创建输出流对象
		FileWriter fw = new FileWriter(dest);
		//读写数据
		int len;
		char[] ch=new char[1024];
		while((len=fr.read(ch))!=-1) {
			fw.write(ch);
			fw.flush();
		}
		//释放资源
		fw.close();
		fr.close();	
	}
	//第四种:创建FileReader对象通过字符     复制一个文本文件(一次读一字符)
	@SuppressWarnings("resource")
	private static void copy04(File src, File dest) throws IOException {
		//创建输入流对象
		FileReader fr = new FileReader(src);
		//创建输出流对象
		FileWriter fw = new FileWriter(dest);
		//读写数据
		int ch;
		while((ch=fr.read())!=-1) {
			fw.write(ch);
		}
		
		//释放资源
		fw.close();
		fr.close();
		
		
	}

	//第三种:通过字符   缓冲流  复制一个文本文件(一次读一字符)
	private static void copy03(File src, File dest) throws IOException {
	//  创建读取缓冲区
				BufferedReader br = new BufferedReader( new FileReader(src));
				//  创建写入缓冲区
				BufferedWriter bw = new BufferedWriter(new FileWriter(dest));
				//定义一个int类型的变量,存储获取到数组的长度
				int len ;
				//调用read  一次读取一个数组,
				while((len=br.read())!=-1){
					/*
					 * void write(int c) 写入单个字符。
					 * write吧接受到的int数强转为char类型
					 * write方法的源码
					 *   public void write(int c) throws IOException {
        			 *		synchronized (lock) {
            					if (writeBuffer == null){
                				writeBuffer = new char[writeBufferSize];
            					}
            					writeBuffer[0] = (char) c;
            					write(writeBuffer, 0, 1);
        					}
    						}
					 * */
					bw.write(len);
					//刷新
					bw.flush();
				}
				//释放资源
				bw.close();
				br.close();
	
	}
	//二种:通过字符   缓冲流  复制一个文本文件(一次读一一个数组)
	private static void copy02(File src, File dest) throws IOException {
			//  创建读取缓冲区
			BufferedReader br = new BufferedReader( new FileReader(src));
			//  创建写入缓冲区
			BufferedWriter bw = new BufferedWriter(new FileWriter(dest));
			//定义一个int类型的变量,存储获取到数组的长度
			int len ;
			//定义一个char数组,用来存储获取到的字符,char数组的长度是1024的倍数
			char[] ch=new char[1024];
			//调用read  一次读取一个数组,
			while((len=br.read(ch))!=-1){
				//一次读取一个数组
				bw.write(ch,0,len);
				//刷新
				bw.flush();
			}
			//释放资源
			bw.close();
			br.close();
		
	
	}

	//一种:通过字符   缓冲流  复制一个文本文件(一次读一行)
	private static void copy01(File src, File dest) throws IOException {
		//  创建读取缓冲区
		BufferedReader br = new BufferedReader( new FileReader(src));
		//  创建写入缓冲区
		BufferedWriter bw = new BufferedWriter(new FileWriter(dest));
		//定义一个字符串,储存读取到的字符串
		String len ;
		//调用redaline  一次读取一行,存入String类型的len
		while((len=br.readLine())!=null){
			//一次读取一行
			bw.write(len);
			//写一个换行符,这个换行符由系统决定
			bw.newLine();
			//刷新
			bw.flush();
			
		}
		//释放资源
		bw.close();
		br.close();
	}
}
复制图片和视频只能用字节流来复制,如果用字符流复制视频或者图片会出现数据丢失!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值