• 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比缓冲复制效率高三分之一。仅供大家参考。

  • 相关阅读:
    opencv::Laplance算子
    opencv::Sobel算子
    Win10小娜关闭或删除进程
    python练习六十九:urllib爬取练习
    python模块之json
    导入json文件报错,TypeError expected string or buffer
    宝塔面板简单介绍
    复制虚拟机出现”适配器 的mac地址在保留地址范围内‘’
    Windows无法启动 VMware Workstation server服务解决方法
    navicat premiun连接mysql数据库报错,错误代码:1251
  • 原文地址:https://www.cnblogs.com/lifescolor/p/3857458.html
Copyright © 2020-2023  润新知