美文网首页
使用字节流实现多级文件夹复制

使用字节流实现多级文件夹复制

作者: 付二十 | 来源:发表于2018-02-25 22:40 被阅读0次

需求:使用字节流实现多级文件夹复制.
当然还有更简单的方法,commos-io..
PS:新手学习中...

    package cn.fcs.demo;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.junit.Test;

/**
 * @author fuershi
 * @date 2018年2月25日 下午10:04:01
 * @description 复制多级文件夹
 */
public class FileDemo05 {
    /* 
     *  
     * 需求:复制多级文件夹 
     * 数据源: D:/temp/from
     * 目的地: D:/temp/desk下
     *  
     * 分析 
     *      A:封装数据源、 
     *      B:封装目的地 
     *      C:判断该File是文件还是文件夹 
     *          a:是文件夹 
     *                  就在目的地下创建该文件夹 
     *                  获取该File对象的所有文件或者文件夹对象 
     *                  遍历得到每一个File对象 
     *                  回到C 
     *          b:是文件 
     *              复制文件 
     */   

    @Test
    public void test01() throws Exception {
        File srcFile = new File("D:/temp/from");
        File deskFile = new File("D:/temp/desk");
        copyFolder(srcFile, deskFile);
    }

    /**
     * @return void
     * @throws Exception
     * @description 文件夹复制,即创建新的文件夹
     */
    public void copyFolder(File srcFile, File deskFile) throws Exception {
        if (srcFile.isDirectory()) {
            // 在目标目录下创建新的目录
            File newFolder = new File(deskFile, srcFile.getName());
            newFolder.mkdirs();
            // 遍历源目录
            File[] listFiles = srcFile.listFiles();
            for (File file : listFiles) {
                // 将源目录下的file对象再次copy
                copyFolder(file, newFolder);
            }
        } else {
            File newFile = new File(deskFile, srcFile.getName());
            copyFile(srcFile, newFile);
        }
    }

    /**
     * @return void
     * @throws Exception
     * @description 文件复制
     */
    public void copyFile(File srcFile, File newFile) throws Exception {
        // 创建输入输出流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));

        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = bis.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        bis.close();
    }
}

在这里如果使用commons-io工具包的话.

    import org.apache.commons.io.FileUtils;

    @Test
    public void test02() throws IOException{
        File srcFile = new File("D:/temp/from");
        File deskFile = new File("D:/temp/desk02");
        FileUtils.copyDirectoryToDirectory(srcFile, deskFile);
        
    }

相关文章

网友评论

      本文标题:使用字节流实现多级文件夹复制

      本文链接:https://www.haomeiwen.com/subject/gnjdxftx.html