Java拷贝目录,即拷贝文件夹及其子文件和子目录,和自定义日志工具类

5 篇文章 0 订阅
4 篇文章 0 订阅

拷贝文件夹及其子文件和子目录

这两天学习了IO流,所以做了一个小Demo,挺有趣的。
拷贝的文件大概率是没问题的,如果被拷贝的目录被其它程序占用可能会出现一点问题。
1. 拷贝目录大多用的是File类方法。
2. 拷贝文件用的是IO流。FileInputStream和FileOutputStream,这两个流是万能的,所有类型的文件都可以复制。
3. 子目录是利用递归不停循环调用拷贝目录的方法。
4. 这个花了一些时间,主要遇到的一个问题就是,你下一次要拷贝的路径和目标路径一定要想好是哪一个。
其它也就没啥了
日志工具类用的是标准输出流:PrintStream ,当然也可以使用其它流

package com.File;

import com.log.logger;

import java.io.*;

// 拷贝目录
public class CopyDirectory {
    // listFile()循环获取

    // 拷贝目录
    public static void CopyDirectory(String filePath, String copyPath){ // 参数是要copy的文件目录
        File file = new File(filePath); // 要拷贝的文件
        File copyFile = new File(copyPath); // 要拷贝的目录
        if (!file.exists()||!copyFile.exists()){
            System.out.println("要拷贝的目录或者拷贝的目的地不存在");
        }
        File[] listFiles = file.listFiles();// 获取当前目录的所有子目录
        int length = listFiles.length;
        for (int i = 0; i < length; i++) {
            // 先在目的地创建需要拷贝的父文件夹
            String fileParentPath = copyPath + "/" + file.getName();
            File fileP = new File(fileParentPath);
            if (!fileP.exists())if (!fileP.mkdir())fileP.mkdirs();

            if (listFiles[i].isFile()){//拷贝子文件
                copyFile(listFiles[i],fileParentPath+"/"+listFiles[i].getName());
            }

            // 接下来拷贝子目录
            if (listFiles[i].isDirectory()){ // 如果是目录
                String name = listFiles[i].getName();//当前要创建的文件夹名称
                String childFilePath = fileParentPath + "/" + name;
                File nullDirectory = new File(childFilePath);
                if (!nullDirectory.exists()){//如果不存在
                    if (!nullDirectory.mkdir()){//直接创建
                        nullDirectory.mkdirs();
                    }
                }
                if (listFiles[i].listFiles().length!=0){//如果文件夹不为空
                    CopyDirectory(listFiles[i].getAbsolutePath(),fileParentPath); // 子目录要拷贝的路径
                }
            }
        }
    }

    // 拷贝单个文件
    public static void copyFile(File file,String copyPath){//file: 拷贝的文件 copyPath:拷贝目的地
        System.out.println("正在拷贝的文件:"+copyPath);
        logger.log("正在拷贝的文件"+copyPath);
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        byte[] bytes = new byte[1024];
        int i = 0;
        try {
            fileInputStream = new FileInputStream(file);
            fileOutputStream = new FileOutputStream(copyPath);
            while((i=fileInputStream.read(bytes))!=-1){
                fileOutputStream.write(bytes,0,i);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (fileInputStream!=null){
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fileOutputStream!=null){
                try {
                    fileOutputStream.flush();
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }

    }

    public static void main(String[] args) {
        //filepath: 要拷贝的文件目录
        // copyPath:目的地
        CopyDirectory("E:/Git_Study/IO","C:/Users/l/Desktop");

    }

}

日志工具类

	package com.log;


import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;

public class logger {
    public static void log(String msg)  {
        Date date = new Date();
        String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
        PrintStream printStream = null;
        try {
            printStream = new PrintStream(new FileOutputStream("src/main/resources/log/my.log", true));
            printStream.println(format+":"+msg);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值