JAVA递归调用 复制文件夹及子文件夹及文件夹下的文件

本文介绍了一个使用Java编写的文件及目录复制工具。该工具能够递归地复制指定路径下的所有文件和子目录,并且能够在目标位置创建相应的目录结构。文章提供了完整的代码实现,包括处理文件与目录的不同操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.*;
  import java.util.*;
  /**
  *复制文件
  *by lecky.lee
  *2006-06-08
  */
  
  public class CopyFile
  {
   String intiPathOut;
   //初始输出路径
   int cnt=0;
   //计数器,用于判定是否首次调用copyFiles方法
   public void copyFiles(String pathIn,String pathOut) throws IOException
   {
   File f= new File(pathIn);
   if(!f.exists()){
   System.out.println ("源文件路径不存在");
   System.exit(5);
   }
   if(cnt==0){
   File out = new File(this.intiPathOut);
   out.mkdir();
   //首次调用执行,创建初始输出目录
   }
   if(f.isFile()){
   this.copyFile(f,pathOut);
   }
   else{
   this.copyDir(f,pathOut);
   } 
   
   cnt++;
   
   }
   
   public void copyDir(File f,String pathOut) throws IOException{
   System.out.println(f.getPath());
   
   
   pathOut=this.intiPathOut+f.getPath().substring(2);
   //修改输出路径字符串,将子文件夹相对路径追加至初始输出路径
   //substring用于去掉路径中的驱动器盘符
   File dir = new File(pathOut);
   dir.mkdir(); 
  
   
   File temp[]=f.listFiles();
   for(int i=0;i   this.copyFiles(temp[i].toString(),pathOut);
   //递归调用此方法
   }
   
   }
   
   public void copyFile(File f,String pathOut) throws IOException{
   System.out.println(f.getPath());
   
   DataInputStream in = new DataInputStream(
   new BufferedInputStream(
   new FileInputStream(f.getPath())));
   
   
   byte[] date = new byte[in.available()];
   
   in.read(date);
   
   DataOutputStream out = new DataOutputStream(
   new BufferedOutputStream(
   new FileOutputStream(pathOut+"/"+f.getName())));
   
   
   out.write(date);
   
   in.close();
   out.close(); 
   
   }
   public static void main(String[] args) throws IOException
   {
   CopyFile cp = new CopyFile();
   cp.intiPathOut="D:/11111111";
   cp.copyFiles("D:/lecky","D:/11111111");
   System.out.println ("复制完毕"); 
   }
   
  } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值