IO流完成文件夹的拷贝与删除

  1 package IO流;
  2 
  3 import java.io.*;
  4 
  5 public class Test03_完成文件夹的拷贝 {
  6     public static void main(String[] args) throws Exception {
  7         //源文件路径
  8         File f1 = new File("F:\\Maven\\smbms");
  9         //目标文件路径
 10         File f2 = new File("H:\\Test\\Demo");
 11 
 12         //调用方法进行拷贝
 13         //folderCopy(f1, f2);
 14 
 15         deleteFile(f2);
 16     }
 17 
 18 
 19     /**
 20      * 递归拷贝文件夹
 21      *
 22      * @param oldFile 源文件夹
 23      * @param newFile 目标文件夹
 24      */
 25     private static void folderCopy(File oldFile, File newFile) {
 26         //判断目标文件夹是否存在
 27         if (!newFile.exists()) {
 28             newFile.mkdirs();
 29         }
 30         //获得源文件夹所有子文件
 31         File[] srcFiles = oldFile.listFiles();
 32         for (File srcFile : srcFiles) {
 33             //创建复制目标文件
 34             File targetFile = new File(newFile.getAbsoluteFile() + "/" + srcFile.getName());
 35             if (srcFile.isDirectory()) {
 36                 //源文件为文件夹,目标文件创建文件夹
 37                 targetFile.mkdir();
 38                 //递归
 39                 folderCopy(srcFile, targetFile);
 40             } else {
 41                 //不是文件夹,复制该文件(此处可以抽取为赋值文件方法)
 42                 FileInputStream fis = null;
 43                 FileOutputStream fos = null;
 44                 try {
 45                     fis = new FileInputStream(srcFile);
 46                     fos = new FileOutputStream(targetFile);
 47                     byte[] bytes = new byte[1024];
 48                     int len = 0;
 49                     while ((len = fis.read(bytes)) != -1) {
 50                         fos.write(bytes, 0, len);
 51                         fos.flush();
 52                     }
 53                 } catch (Exception e) {
 54                     e.printStackTrace();
 55                 } finally {
 56                     //关闭流
 57                     if (fos != null) {
 58                         try {
 59                             fos.close();
 60                         } catch (IOException e) {
 61                             e.printStackTrace();
 62                         }
 63                     }
 64                     if (fis != null) {
 65                         try {
 66                             fis.close();
 67                         } catch (IOException e) {
 68                             e.printStackTrace();
 69                         }
 70                     }
 71                 }
 72 
 73             }
 74         }
 75     }
 76 
 77 
 78     /**
 79      * 递归删除文件夹
 80      *
 81      * @param file
 82      */
 83     public static void deleteFile(File file) {
 84         //判断路径是否存在
 85         if (file.exists()) {
 86             //测试此抽象路径名表示的文件是否是一个标准文件。
 87             if (file.isFile()) {
 88                 file.delete();
 89             } else {//不是文件,对于文件夹的操作
 90                 //返回file路径下所有文件和文件夹的绝对路径
 91                 File[] listFiles = file.listFiles();
 92                 for (File file2 : listFiles) {
 93                     /*
 94                      * 递归作用:由外到内先一层一层删除里面的文件 再从最内层 反过来删除文件夹
 95                      *    注意:此时的文件夹在上一步的操作之后,里面的文件内容已全部删除
 96                      *         所以每一层的文件夹都是空的  ==》最后就可以直接删除了
 97                      */
 98                     deleteFile(file2);
 99                 }
100                 file.delete();
101             }
102         } else {
103             System.out.println("该file路径不存在!!");
104         }
105     }
106 }

 

posted @ 2021-02-02 20:39  Java小白的搬砖路  阅读(142)  评论(0编辑  收藏  举报