java实现文件夹的复制

package javaio.recursion.Reader;

import java.io.*;
import java.util.*;
public class Copyfile {

	public static void main(String[] args) throws IOException {
		Scanner s=new Scanner(System.in);
		System.out.println("输入你想要复制的文件或文件夹");
		String str1=s.next();
		System.out.println("输入你想要粘贴在哪的文件或文件夹");
		String str2=s.next();
		File f1=new File(str1);
		File f2=new File(str2);
		if(f1.exists())          //先判断f1是否存在
		  copy(f1,f2);
		else
			System.out.println("想要复制的文件不存在");
		
	}
	
	public static void copy(File fs,File ft) throws IOException {
		
		if(fs.isFile()&&ft.isFile()){
			if(fs.getName().equals(ft.getName()))
				ft=new File(ft,ft.getName()+"-副本");  //同名的改名
			copyfile(fs,ft);
		}
		if(fs.isDirectory()&&ft.isDirectory()) {
			File[] f=fs.listFiles();           //fs 下的每个子目录
			File tmp=ft; 
			ft=new File(ft,fs.getName());
			
			if(!ft.mkdirs()) {
				ft=new File(tmp,fs.getName()+"-副本");  //如果是相同的文件名 即目录创建失败 则改名
				ft.mkdirs();
			}
			for(File x:f) {
				File c=new File(ft,x.getName()); //创建同名的目录或文件抽象
				System.out.println("复制"+c.getName());
				if(x.isDirectory()){
					c.mkdirs();  //创建目录
					copy(x,c);
				}else{
					c.createNewFile();
					copyfile(x,c);
				}
			    }
	    }
		if(fs.isFile()&&ft.isDirectory()) {
			File tmp=ft;    //用于存ft的路径,假如有重名的则调用这个变量
			ft=new File(ft,fs.getName()); //若是将文件复制到一个目录,则应该在改目录下面创建一个文件
			if(!ft.createNewFile()) {
				ft=new File(tmp,fs.getName()+"-副本");  //同理,重名的进行改名
				ft.createNewFile();
			}
			copyfile(fs,ft);
		}
		if(fs.isDirectory()&&fs.isFile()){
			System.out.println("无法将目录复制到文件中/(ㄒoㄒ)/~~");
			return;
		}
	}
	public static void copyfile(File fs,File ft) throws IOException {
		FileInputStream fi=new FileInputStream(fs);
		FileOutputStream fo=new FileOutputStream(ft);
		
		BufferedInputStream bfi = null;
		BufferedOutputStream bfo =null;
		
		bfi=new BufferedInputStream(fi);
		bfo=new BufferedOutputStream(fo);
		
		int count=-1;
		while((count=bfi.read())!=-1) {
			bfo.write(count);
		}
		
		bfo.flush();
		bfo.close();
		bfi.close();
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值