zoukankan      html  css  js  c++  java
  • Java中FileInputStream和FileOutputStream类实现文件夹及文件的复制粘贴

    基本思路就是边搜索边复制,这里用的是广度搜索(BFS)

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.ArrayDeque;
    
    public class CopyFile {
    
        public static void main(String[] args) {
            File f1 = new File("kkk");
            File f2 = new File("D:\");
            try {
                getPathBFS(f1,f2);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        /**
         * 用于读和写
         * @param f1 输入流
         * @param f2 输出流
         */
        private static void copyFile(File f1,String f2){
            InputStream in = null;
            OutputStream out = null;
            try {
                in = new BufferedInputStream(new FileInputStream(f1));
                out = new BufferedOutputStream(new FileOutputStream(f2));
                byte by[] = new byte[1024];
                int len = 0;
                while((len = in.read(by))!=-1){
                    out.write(by, 0, len);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                if(in!=null){
                    try {
                        in.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(out != null){
                    try {
                        out.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
        /**
         * 用于搜索
         * @param f1 目标文件
         * @param f2 复制到的目标
         * @throws IOException
         */
        private static void getPathBFS(File f1,File f2) throws IOException {
            //运用队列进行广度搜索
            ArrayDeque<File> deque = new ArrayDeque<File>();
            //用于存储复制目标文件
            ArrayDeque<File> dequeCopy = new ArrayDeque<File>();
            //第一个File实例入队
            deque.offer(f1);
            //创建第一个文件夹
            f2 = new File(f2,f1.getName());
            dequeCopy.offer(f2);
            //队列为空时停止
            while(!deque.isEmpty()){
                //取队头
                File[] ff = deque.peek().listFiles();
                File copyFiledir = dequeCopy.peek();
                //创建文件夹
                copyFiledir.mkdir();
                //出队
                deque.poll();
                dequeCopy.poll();
                for(int i=0;i<ff.length;i++){
                    //如果是目标文件夹入队
                    if(ff[i].isDirectory()){
                        //复制文件夹入队
                        File temp = new File(copyFiledir,ff[i].getName());
                        dequeCopy.push(temp);
                        deque.push(ff[i]);
                    }else{
                        //复制到相应文件夹
                        copyFile(ff[i],copyFiledir.getAbsolutePath()+"\"+ff[i].getName());
                    }
                }
            }
        }
    
    }
  • 相关阅读:
    js转盘游戏
    wps excel
    微软笔记本
    图片识别
    数据库 连接 集
    Vue + Element UI 实现权限管理系统 前端篇(十二):用户管理模块
    Vue + Element UI 实现权限管理系统 前端篇(十三):页面权限控制
    Vue + Element UI 实现权限管理系统 前端篇(十四):菜单功能实现
    Vue + Element UI 实现权限管理系统 前端篇(十五):嵌套外部网页
    Vue + Element UI 实现权限管理系统 前端篇(九):接口格式定义
  • 原文地址:https://www.cnblogs.com/hnzyyTl/p/4970104.html
Copyright © 2011-2022 走看看