zoukankan      html  css  js  c++  java
  • Java语言使用io流实现文件夹的复制

    功能:复制文件夹
    技能:IO流进行文件的复制  创建文件夹 dir.mkdirs();  递归

    问题1:使用字节流还是字符流
       字节流 因为有二进制文件
    问题2:提高复制的速度
       缓冲流 BufferedInputStream BufferedOutputStream
      中转站:一个字节------>一个字节数组
    问题3:问题分解
        分解1:复制一个文件
        分解2:复制一个文件夹下的所有的文件(不包括子文件夹)
        分解3:复制一个文件夹下的所有的文件和子文件夹(也包括子文件夹下内容)z

    
    import java.io.*;
    
    public class TestCopyDir {
        public static void main(String[] args) {
    //        copyFile("d:/hello.txt", "d:/hello1.txt");
            copyDir("D:/hello", "D:/hello2");
        }
    
        //复制文件夹
        public static void copyDir(String sourceDirName, String destDirName) {
            //创建目的文件夹
            File destDir = new File(destDirName);
            if (!destDir.exists()) {
                destDir.mkdirs();
            }
    
            //获取源文件夹下所有的文件和文件夹并复制
            File sourceDir = new File(sourceDirName);
            if (!sourceDir.exists()) {
                System.out.println("源文件夹:[" + sourceDirName + "]不存在!");
                return;
            }
    
            File[] files = sourceDir.listFiles();
            for (File file : files) {
                //如果是文件,就复制
                if (file.isFile()) {
                    System.out.println("----------正在复制文件:" + file.getName() + "---------------");
                    //复制文件
                    copyFile(sourceDirName + "/" + file.getName(), destDirName + "/" + file.getName());
                }
                //如果是文件夹,就复制
                if (file.isDirectory()) {
                    System.err.println("----------正在复制文件夹:" + file.getName() + "---------------");
                    copyDir(sourceDirName + "/" + file.getName(), destDirName + "/" + file.getName());
                }
            }
        }
    
        //复制文件
        public static void copyFile(String sourceFileName, String destFileName) {
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            try {
                //创建一个输入流和一个输出流
                bis = new BufferedInputStream(new FileInputStream(new File(sourceFileName)));
                bos = new BufferedOutputStream(new FileOutputStream(new File(destFileName)));
    
                //使用一个输入流(读)和一个输出流(写)
                byte[] bytes = new byte[1024];//中转站
                int len = 0;
                while ((len = bis.read(bytes)) != -1) {
                    bos.write(bytes, 0, len);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //关闭一个输入流和一个输出流
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
    
        }
    }
    
  • 相关阅读:
    计算机语言的学习之道
    单麦克风远场语音降噪解决方案
    ESP8266 SPI 开发之软件驱动代码分析
    ESP8266 SPI 开发之软硬基础分析
    蓝牙5.0协议及下载地址
    python中往json中添加文件的方法
    Python isinstance() 函数含义及用法解析
    从一线方案商的角度来看高通QCC3020芯片
    Ubuntu18.04声卡配置问题解决
    python 音频通道分离的源码实现
  • 原文地址:https://www.cnblogs.com/chenxiaoge/p/13335477.html
Copyright © 2011-2022 走看看