美文网首页java复习
2020-07-04复制文件夹

2020-07-04复制文件夹

作者: 智障猿 | 来源:发表于2020-07-08 08:40 被阅读0次

    复制单级文件夹

    • 步骤
      ①创建数据源目录File对象,路径是E:\test
      ②获取数据源目录File对象的名称 (itcast)
      ③创建目的地目录File对象,路径名(自拟)
      ④判断目的地File对象对应的目录是否存在,如果不存在就创建
      ⑤获取数据源目录下所以的File数组
      ⑥遍历File数组,得到每一个File对象,该File对象,其实就是数据源文件
      ⑦获取数据源文件File对象的名称
      ⑧创建目的地文件File对象,路径名为目的地+文件File对象名称
      ⑨复制文件(由于文件不仅仅是文本文件,所以使用缓冲字节流)
     public static void main(String[] args) throws IOException {
            //创建数据源目录File对象,路径是E:\\test
            File dis = new File("E:\\test");
            //获取数据源目录File对象的名称 (itcast)
            String disName = dis.getName();
            //创建目的地目录File对象,路径名(自拟)
            String path = "test\\"+disName;
            File dos =new File(path);
            //判断目的地File对象对应的目录是否存在,如果不存在就创建
            if(!dos.exists()){
                dos.mkdir();
            }
            //获取数据源目录下所以的File数组
            File[] listFiles = dis.listFiles();
            //遍历File数组,得到每一个File对象,该File对象,其实就是数据源文件
            for (File f: listFiles) {
                //获取数据源文件File对象的名称
                String srcname = f.getName();
                //创建目的地文件File对象,路径名为目的地+文件File对象名称
                File dosfile = new File(dos,srcname);
                //复制文件
                copy(f,dosfile);
            }
    
        }
     public static void copy(File src,File dos) throws IOException {
            BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(src));
            BufferedOutputStream bufferedOutputStream =new BufferedOutputStream(new FileOutputStream(dos));
            byte[] bytes = new byte[1024];
            int len;
            while((len = bufferedInputStream.read(bytes))!=-1){
                bufferedOutputStream.write(bytes);
            }
            bufferedInputStream.close();
            bufferedOutputStream.close();
    
     }
    

    复制多级文件夹(递归)

    • 思路
      ①创建数据源File对象,
      ②创建目的地File对象
      ③写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
      ④判断数据源File是否是目录
      a.在目的地下创建和数据源File名称一样的目录。
      b.获取数据源File下所有文件或者目录的File数组
      c.遍历该File数组,得到每一个File对象
      d.把该File作为数据源File对象,递归调用复制文件夹的方法
    public static void main(String[] args) throws IOException {
            File file  = new File("E:\\test");
            File dosfile  = new File("F:\\");
            copyFolder(file,dosfile);
        }
    public static void copyFolder(File srcFiles,File desFile) throws IOException {
            //判断数据源是否是目录
            if (srcFiles.isDirectory()){
                //在目的地下创建和数据源file名称一样的目录
                String srcFileName = srcFiles.getName();
                File newFolder = new File(desFile,srcFileName);
                if (!newFolder.exists()){
                    newFolder.mkdir();
                }
                //获取数据源File下所有文件或者目录的File数组
                File[] listFiles = srcFiles.listFiles();
                for (File file:listFiles){
                    //把该File作为数据源File对象,递归调用复制文件夹的方法
                    copyFolder(file,newFolder);
                }
            }else {
                //说明是文件,直接复制,用字节流
                File newFile = new File(desFile,srcFiles.getName());
                copyFile(srcFiles,newFile);
            }
        }
    public static void copyFile(File srcFile,File desFile) throws IOException {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desFile));
            byte[] bytes = new byte[1024];
            int len;
            while ((len=bis.read(bytes))!=-1){
                bos.write(bytes);
      }
            bis.close();
            bos.close();
      }
    

    相关文章

      网友评论

        本文标题:2020-07-04复制文件夹

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