zoukankan      html  css  js  c++  java
  • java实现文件夹(包括其中的子文件夹、子文件)的复制——递归

    这是学校java课的一道实验题,题目如下:编程,根据指定的源和目标位置,完成指定文件或文件夹(包括其中的子文件夹、子文件)的复制。

    以下是我的实现,使用了递归:

     1 package com.simon.myfinal;
     2 
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.FileOutputStream;
     6 import java.io.InputStream;
     7 
     8 /**
     9  * Created by Rainmer on 2015/6/28.
    10  */
    11 public class FileCopy {
    12     public static void main(String[] args) {
    13         String oldPath = "D:/bower";
    14         String newPath = "D:/bowerCopy";
    15         File dirNew = new File(newPath);
    16         dirNew.mkdirs();//可以在不存在的目录中创建文件夹
    17         directory(oldPath, newPath);
    18         System.out.println("复制文件夹成功");
    19     }
    20 
    21     /**
    22      * 复制单个文件
    23      * @param oldPath 要复制的文件名
    24      * @param newPath 目标文件名
    25      */
    26     public static void copyfile(String oldPath, String newPath) {
    27         int hasRead = 0;
    28         File oldFile = new File(oldPath);
    29         if (oldFile.exists()) {
    30             try {
    31                 FileInputStream fis = new FileInputStream(oldFile);//读入原文件
    32                 FileOutputStream fos = new FileOutputStream(newPath);
    33                 byte[] buffer = new byte[1024];
    34                 while ((hasRead = fis.read(buffer)) != -1) {//当文件没有读到结尾
    35                     fos.write(buffer, 0, hasRead);//写文件
    36                 }
    37                 fis.close();
    38             } catch (Exception e) {
    39                 System.out.println("复制单个文件操作出错!");
    40                 e.printStackTrace();
    41             }
    42         }
    43     }
    44 
    45     /**
    46      *
    47      * @param oldPath 要复制的文件夹路径
    48      * @param newPath 目标文件夹路径
    49      */
    50     public static void directory(String oldPath, String newPath) {
    51         File f1 = new File(oldPath);
    52         File[] files = f1.listFiles();//listFiles能够获取当前文件夹下的所有文件和文件夹
    53         for (int i = 0; i < files.length; i++) {
    54             if (files[i].isDirectory()) {
    55                 File dirNew = new File(newPath + File.separator + files[i].getName());
    56                 dirNew.mkdir();//在目标文件夹中创建文件夹
    57                 //递归
    58                 directory(oldPath + File.separator + files[i].getName(), newPath + File.separator + files[i].getName());
    59             } else {
    60                 String filePath = newPath + File.separator + files[i].getName();
    61                 copyfile(files[i].getAbsolutePath(), filePath);
    62             }
    63 
    64         }
    65     }
    66 }
  • 相关阅读:
    linux文件IO操作篇 (二) 缓冲文件
    信号量和互斥锁的区别
    linux 无锁化编程
    C语言中 time相关的函数 头文件
    printf 打印字体和背景带颜色的输出的方法
    在win10环境下安装Cygwin,可以GCC编译
    学习《大话存储》
    linux内核态和用户态的信号量
    学习Makefile
    git 环境搭建
  • 原文地址:https://www.cnblogs.com/rainmer/p/4605064.html
Copyright © 2011-2022 走看看