用Java程序实现文件夹的复制

文件的复制相信大家都有所了解,就不说了,下面分享下,如何将一个目录下的所有文件包括子文件夹复制到指定的目录中,下面我贴上代码,注释很清楚,你看了就应该明白了。

package testFile;
import java.io.*;
public class FileAndDirCopy {
	
	//注意:任何文件(包括图片,音乐,影视,压缩文件等等)复制都要用字节流,字符流只能复制txt文档;
	public static void main(String[] args) throws Exception {
		
		//复制开始时获得系统的当前时间
		long start =System.currentTimeMillis();//记录开始运行时间单位为毫秒;
		
		//要复制的目源(源目录)
		File from=new File("D:\\");
		
		//复制到的目录(目标目录)
		File to=new File("E:\\");
		
		System.out.println("正在复制,请稍后.......");
		
		//调用复制方法
		copy(from ,to);
		
		//复制结束时获得系统时间
		long end=System.currentTimeMillis();
		
		System.out.println("复制完成!!!");
		
		//从毫秒转成秒
		System.out.println("总费时:"+(end-start)/1000.0+"秒");
		
		
	}
	
	
	/**
	 * 
	 * @param from 要复制的目录
	 * @param to 复制到目录
	 * @throws Exception 
	 */
	public static void copy(File from,File to) throws Exception{
		
		//获得复制文件下下所有文件
		File []fs=from.listFiles();
		
		//遍历文件
		for(int i=0;i<fs.length ;i++){
			
			//如果是一个目录
			if(fs[i].isDirectory()){
				
				//获得目录的名字
				String dirname=fs[i].getName();
				
				//创建要生成目录的绝对路径
				String dirpath=to+"\\"+dirname;  
				
				File f=new File(dirpath);
				
				//创建一个目录
				f.mkdir();
				
				//调用复制文件夹方法
				copy(fs[i],f);
				
				
			}else{
				
				//获得文件名
				String filename=fs[i].getName();
				
				//获得的文件的绝对路径
				String filepath=to+"\\"+filename;
				
				//建好文件;
				File f=new File(filepath);
				
				//复制文件内容方法
				copyFile(fs[i],f); //将原文件的内容复制到新文件里来;
			}
		}
	}
	
	
	/**
	 *  //文件复制的方法
	 * @param from 要复制的文件
	 * @param to //复制到的文件
	 * @throws Exception
	 */
	public static void copyFile(File from ,File to) throws Exception{
		
		//构建一个文件输入流对象
		FileInputStream fin=new FileInputStream(from);
		
		//构建以个文件输出流对象
		FileOutputStream fout=new FileOutputStream(to);
		
		//缓冲输入流
		BufferedInputStream bin=new BufferedInputStream(fin);
		
		//缓存输出流
		BufferedOutputStream bout=new BufferedOutputStream(fout);
		
		//定义个字节数组,作为输入流和输出流的中介
		byte [] b=new byte[2048];
		
		//读入的字节长度如果为-1,说明没有内容了
	    int len=bin.read(b);
		while(len !=-1){
			
			//将字节数组写入输出流中
			bout.write(b,0,len);
			len=bin.read(b);
		}
		
		//关闭流,注意顺序
		bout.close();
		fout.close();
		bin.close();
		fin.close();
	}
	

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值