复制指定文件夹(包含所有子文件和子文件夹)

package copyFileAndFolder;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyFilesAndFolder{
	public static String path = "G:\\abc";
	public static String topath = "G:\\d";
	public static void main(String[] args) throws IOException{
		
		//创建目标文件
		//if(!new File(topath).exists()){//不存在此路径
		new File(topath).mkdirs();
		//}
		
		//获取源文件下的文件或目录
		//listFiles()  返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
		File[] file=new File(path).listFiles();
		
		//length()  返回由此抽象路径名表示的文件的长度
		if(file.length>0){	
			for(File f:file){ //f表示要把该文件夹所有的文件夹和文件跑一遍,files 表示上层目录	
				if(f.isDirectory()){//测试此抽象路径名表示的文件是否是一个目录
					// 复制目录 
					//separator  与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
					String sourceDir=path+File.separator+f.getName(); 
					String targetDir=topath+File.separator+f.getName();
					copyDirectiory(sourceDir, targetDir);
					System.out.println(path+ "\\" +f.getName()+" 目录已复制到"+topath+"\\" +f.getName());
				}//if
				if(f.isFile()){
					// 复制文件
					copyFile(f,new File(topath+File.separator+f.getName()));  
					System.out.println(path+"\\"+f.getName()+" 文件已复制到"+topath+"\\" +f.getName());
				}//if
			}//for
		}//if
	}//main
	// 复制文件 
	public static void copyFile(File sourceFile,File targetFile) throws IOException{ 
		// 新建文件输入流并对它进行缓冲
		FileInputStream input = new FileInputStream(sourceFile);
		BufferedInputStream inBuff=new BufferedInputStream(input);
		// 新建文件输出流并对它进行缓冲 
		FileOutputStream output = new FileOutputStream(targetFile);
		BufferedOutputStream outBuff=new BufferedOutputStream(output); 
		// 缓冲数组 
		byte[] b = new byte[1024 * 5];
		int len;
		while ((len =inBuff.read(b)) != -1) { 
			outBuff.write(b, 0, len); 
		} 
			// 刷新此缓冲的输出流 outBuff.flush(); 
			//关闭流
			inBuff.close(); 
			outBuff.close();
			output.close();
			input.close(); 
	}
	// 复制文件夹 /会判断每个文件夹中是否有文件,如果有,则调用文件复制
	public static void copyDirectiory(String sourceDir, String targetDir) throws IOException { 
		// 新建目标目录 
		(new File(targetDir)).mkdirs(); 
		// 获取源文件夹当前下的文件或目录
		File[] file = (new File(sourceDir)).listFiles();
		for (int i = 0; i < file.length; i++) {
			if (file[i].isFile()) {
				// 源文件 
				File sourceFile=file[i];
				// 目标文件 
				File targetFile=new File(new File(targetDir).getAbsolutePath() +File.separator+file[i].getName()); 
				copyFile(sourceFile,targetFile);
			} 
			if (file[i].isDirectory()) { 
				// 准备复制的源文件夹
				String dir1=sourceDir + "/" + file[i].getName();
				// 准备复制的目标文件夹 
				String dir2=targetDir + "/"+ file[i].getName(); 
				copyDirectiory(dir1, dir2);
			} 
		}//for
	}//copyDirectiory
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java文件夹复制(远程复制(网络传输),用于远程备份文件)(支持文件夹,嵌套文件夹) import java.io.*; import java.util.*; public class FileSelection { private File rootDirectory;//根目录 private File[] fileList;//文件目录下面的文件列表(包括目录,用于多次判断) private ArrayList fileArrayList; // 用于存储文件(只是文件)列表 //初始化参数 public FileSelection() { fileArrayList=new ArrayList(); rootDirectory = new File("Test"); rootDirectory.mkdir(); } //获得文件(不包括目录)的列表 public void initFileArrayList() { if (rootDirectory.isDirectory()) { //遍历目录下面的文件目录 fileList = rootDirectory.listFiles(); for (int i = 0; i < fileList.length; i++) { //如果是文件,添加到文件列表中 if(fileList[i].isFile()){ fileArrayList.add(fileList[i]); } //否则递归遍历目录 else if (fileList[i].isDirectory()) { fileList[i].mkdir(); rootDirectory=fileList[i]; initFileArrayList(); } } } } //将文件信息添加到列表中 public void addFiles(File f){ fileArrayList.add(f); } //访问器返回文件列表 public ArrayList getFileArrayList() { return fileArrayList; } } -------------------- BackupClient.java package com.xinxin.Client; import java.io.*; import java.net.*; /** * * @author Administrator *@version 1.0 *BackupClient类实现文件的传输到服务器 */ public class BackupClient implements Runnable{ private int port;//服务器端口 private InetAddress ipAddress;//服务器IP地址 private Socket clientSocket;//客户端套接字 private InputStream inputStream;//网络输入流 private OutputStream outputStream;//网络输出流 private File file; //构造函数(获得服务器端IP地址和监听端口号) public BackupClient(InetAddress ipAddress,int port,File file){ this.ipAddress=ipAddress; this.port=port;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值