zoukankan      html  css  js  c++  java
  • JAVA实现复制文件夹

      1 package com.filetest;
      2 
      3 import java.io.BufferedInputStream;
      4 import java.io.BufferedOutputStream;
      5 import java.io.File;
      6 import java.io.FileInputStream;
      7 import java.io.FileOutputStream;
      8 import java.io.IOException;
      9 import java.util.Scanner;
     10 
     11 public class copyfile {
     12 
     13     public static void main(String args[]) throws IOException{
     14         
     15         copy();            //调用复制函数
     16         System.out.println("复制完成!");    //提示复制完成
     17     }
     18 
     19     private static void copy() throws IOException {
     20         
     21         System.out.println("输入你要复制的文件路径及名称:");
     22         Scanner scanner=new Scanner(System.in);
     23         String oldpath=scanner.next();        //接收原文件夹路径及名称
     24         
     25         File ofile=new File(oldpath);    
     26         if((!ofile.exists()||!ofile.isDirectory())){    //判断源文件夹路径是否存在
     27             
     28             if(oldpath.equals("end"))                    //路径不存在则进入判断内,如果输入的不是end则递归调用重新输入
     29             {
     30                 System.out.println("程序结束,感谢使用!");
     31                 System.exit(-1);
     32             }
     33             else
     34             {
     35                 System.out.println("输入的源文件夹路径不存在,请重新输入!(输入end退出程序)");
     36                 copy();
     37             }
     38                         
     39         }
     40         
     41         System.out.println("输入你要复制该文件到哪个路径:");
     42         String newpath=scanner.next();        //接收目标文件夹路径及名称
     43         
     44         File nfile=new File(newpath);
     45         if(!nfile.isAbsolute()){    //判断目标文件夹路径是否为目录
     46             if(newpath.equals("end"))                    //路径不存在则进入判断内,如果输入的不是end则递归调用重新输入
     47             {
     48                 System.out.println("程序结束,感谢使用!");
     49                 System.exit(-1);
     50             }
     51             else
     52             {
     53                 System.out.println("输入的目标文件夹目录格式不正确,请重新输入!(输入end退出程序)");
     54                 copy();
     55             }
     56                         
     57         }
     58         
     59         //截取源文件夹路径最后的名字
     60         String laststr  = oldpath.substring(oldpath.lastIndexOf("/"), oldpath.length());
     61         copyDirectiory(oldpath,newpath+"/"+laststr);  //将原路径文件夹名称和目标路径文件夹名称传递给复制文件夹函数
     62         
     63         
     64     }
     65     
     66     
     67     //用缓冲流复制文件函数
     68     public static void copyFile(File sourceFile,File targetFile)   
     69             throws IOException{  
     70                     // 新建文件输入流并对它进行缓冲   
     71                     FileInputStream input = new FileInputStream(sourceFile);  
     72                     BufferedInputStream inBuff=new BufferedInputStream(input);  
     73               
     74                     // 新建文件输出流并对它进行缓冲   
     75                     FileOutputStream output = new FileOutputStream(targetFile);  
     76                     BufferedOutputStream outBuff=new BufferedOutputStream(output);  
     77                       
     78                     int len;  
     79                     while ((len =inBuff.read()) != -1) 
     80                     {  
     81                         outBuff.write(len);  
     82                     }  
     83                     // 刷新此缓冲的输出流   
     84                     outBuff.flush();  
     85                       
     86                     //关闭流   
     87                     inBuff.close();  
     88                     outBuff.close();  
     89                     output.close();  
     90                     input.close();  
     91                 }  
     92     
     93     
     94     // 复制文件夹函数
     95     public static void copyDirectiory(String sourceDir, String targetDir)  
     96                         throws IOException {                             
     97                          
     98                         File aimfile=new File(targetDir);
     99                         if(!(aimfile).exists()){    //查看目录是否存在,不存在则新建
    100                              aimfile.mkdirs();   
    101                         }
    102                         
    103                         if(sourceDir.equals(targetDir)){    //如果文件路径及文件名相同则覆盖
    104                             System.out .println("文件已存在,是否覆盖(N退出/任意键继续)?");
    105                             Scanner scanner=new Scanner(System.in);
    106                             String NY=scanner.next();
    107                             if(NY.equalsIgnoreCase("n")){    //如果不想覆盖 可退出程序
    108                                 System.out.println("程序结束,感谢使用!");
    109                                 System.exit(-1);
    110                             }
    111 
    112                         }
    113                     
    114                         // 获取源文件夹下的文件或目录   
    115                         File oldfile=new File(sourceDir);
    116                         File[] file=oldfile.listFiles();  
    117         
    118                         for(int i=0;i<file.length;i++)
    119                         {  
    120                             
    121                             if (file[i].isFile()) //如果是文件,传递给copyFile()函数进行复制
    122                                 {   
    123                                     //目标文件  
    124                                     File aim=new File(targetDir);  
    125                                     File targetFile=new File(aim.getAbsolutePath()+"/"+file[i].getName());  
    126                                     copyFile(file[i],targetFile);  
    127                                 }  
    128                             if (file[i].isDirectory()) //如果是文件夹,则递归调用
    129                                 {  
    130                                     // 要递归复制的源文件夹   
    131                                     String soursefiles=sourceDir + "/" + file[i].getName(); 
    132                                     
    133                                     // 要递归复制的目标文件夹   
    134                                     String aimfiles=targetDir + "/"+ file[i].getName();
    135                                     
    136                                     copyDirectiory(soursefiles, aimfiles);  
    137                                 }  
    138                         }  
    139                 }  
    140         }


    其实在复制单个文件的时候可以优化一下  用FileChannel比缓冲复制效率高三分之一。仅供大家参考。

  • 相关阅读:
    android 中文 api (43) —— Chronometer
    SVN客户端清除密码
    Android 中文 API (35) —— ImageSwitcher
    Android 中文API (46) —— SimpleAdapter
    Android 中文 API (28) —— CheckedTextView
    Android 中文 API (36) —— Toast
    Android 中文 API (29) —— CompoundButton
    android 中文 API (41) —— RatingBar.OnRatingBarChangeListener
    Android 中文 API (30) —— CompoundButton.OnCheckedChangeListener
    Android 中文 API (24) —— MultiAutoCompleteTextView.CommaTokenizer
  • 原文地址:https://www.cnblogs.com/lifescolor/p/3857458.html
Copyright © 2011-2022 走看看