复制文件或文件夹时,可以写一个方法,接受两个File类型参数。一个是要复制的文件,另一个是要复制的地方。方法具体大概是这样,先判断 源文件是文件还是文件夹,如是文件,就在目标路径里用字节流复制该文件。关键在于如何在目标路径里复制文件。可以创建一个File对象参数为目标对象+源文件.getName()。如果是文件夹,就在目标路径里复制一个文件夹,即创建一个File对象构造参数为目标+源文件路径.getName. 在用File对象的 mkdir 在本地创建文件夹。 然后获取要复制的文件夹中的文件。遍历这个文件数组。开始递归。是文件就复制文件,是文件夹就复制文件夹,获取文件夹里的文件继续。直到没有文件夹为止。

代码


package com.IO.www;
import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 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;public class MyMdir {
 public static void main(String[] args) throws IOException {
   // TODO Auto-generated method stub
   File f=new File("D:\\JVM");
   File f1=new File("C:");
   CopyFile(f, f1);
    
  
  }//复制文件或文件的方法
  private static void CopyFile(File src,File target) {
   if(src.exists()){
    //判断路径表示的是否是目录,如是
    if(src.isFile()){
     //在目标路径里创建该文件复制文件
     File file=new File(target+"\\"+src.getName());
     //如果该路径代表的文件已存在,则另起他名。我用的是win的方式加复制文件二字。
     if(file.exists()){
      file=new File(target+"\\"+"复制文件"+System.currentTimeMillis()+src.getName());
     }
     BufferedInputStream bin=null;
     BufferedOutputStream bout=null;
     try{
      bin=new BufferedInputStream(new FileInputStream(src));
      bout=new BufferedOutputStream(new FileOutputStream(file));
      byte buf[]=new byte[1024];
      int len=0;
      while((len=bin.read(buf))!=-1){
       bout.write(buf, 0, len);
      }
     }catch(IOException e){
      e.printStackTrace();
      System.out.println("文件复制失败");
     }finally{
      if(bin!=null){
       try {
        bin.close();
       } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
      }if(bout!=null){
       try {
        bout.close();
       } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
      }
     }
     //判断目标是否是文件夹,如是
    }if(src.isDirectory()){
     //创建在目标路劲里原路径的文件夹对象
     File file=new File(target+"\\"+src.getName());
     if(file.exists()){
      file=new File(target+"\\"+"复制文件夹"+System.currentTimeMillis()+src.getName());
     }
     //在本地创建文件夹
     file.mkdir();
     //获取文件夹中的文件
     File[]files=src.listFiles();
     for(File f:files){
      //递归,再次复制文件或文件夹
      CopyFile(f,file);
     }
    }
   }else{
    System.out.println("您要复制的文件不存在");
   } }
 }