• 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());
                    }
                }
            }
        }
    
    }
  • 相关阅读:
    Java 对象和类
    Java main方法解释
    Android点击EditText文本框之外任何地方隐藏键盘的解决办法
    页面跳转回来之后,网络请求自动刷新
    《买红薯的故事》醍醐灌顶,警钟长鸣。
    字符串比较器,例如按照时间的升序降序,或者姓氏排序
    android中用Intent传数据,如果用传递的是一个类,就将类实现Parcelable接口
    view在使用shape属性加圆角的同时,用代码修改其他background属性(例如颜色)不生效
    android基础学习之布局
    详解安卓项目-闹钟
  • 原文地址:https://www.cnblogs.com/hnzyyTl/p/4970104.html
Copyright © 2020-2023  润新知