栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA实现文件夹的拷贝

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA实现文件夹的拷贝

这两天学习到了IO流方面的知识,简单来讲就是文件的输入和输出操作

然后就想着通过java的io流和File类的文件操作实现某个文件夹的复制拷贝,本来还想加一个文件压缩的函数,但是学艺未精,后面再说吧。

具体思路如下:一开始想着先把文件夹下所有的子文件夹都通过File类里的mkdirs方法全部创建下来,然后,重新遍历文件夹copy一些文件,但是这样我就要遍历两次,有点麻烦。

然后,想到所有的文件都存放在文件夹里,我遍历到每一个文件,然后获取前一目录,创建文件夹,复制文件,直接一步到位,但是如果有空文件夹就会直接跳过,复制不了,所有得再加一个判断文件夹是否为空的语句。


import java.io.*;


public class getDirectory {
    String oldpath;//复制的原路径
    String newpath;//复制的目标路径
    getDirectory(String oldpath,String newpath){
        this.oldpath=oldpath;
        this.newpath=newpath;
    }

    public void copy(){
        File file=new File(oldpath);
        getdir(file);
    }
    
    private void getdir(File file) {
        File[] f;//存储文件夹下子目录信息
        f = file.listFiles();//返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
        for (File f1 : f) {
            if (f1.isDirectory()) {//判断子目录是否为文件夹
                if (f1.list().length==0){//判断子目录是不是空文件夹
                    System.out.println(f1.getPath());//打印空文件路径(测试)
                    File fcopy = new File(f1.getPath().replace(oldpath, newpath));//这里替换原路径和目标路径
                    fcopy.mkdirs();//如果是空文件夹就直接创建一个空的目录,
                }
                getdir(f1);//如果不是空的就继续遍历。
            } else if (f1.isFile()) {//判断是不是文件,如果是,获取当前目录,替换路径字符串,然后进行复制
                File fcopy = new File(f1.getParent().replace(oldpath, newpath));
                fcopy.mkdirs();
                FileInputStream fis= null ;
                BufferedInputStream bis= null;
                FileOutputStream fos = null;
                BufferedOutputStream bos = null;
                byte[] b=new byte[1024];
                int temp=0;
                try {
                    fis = new FileInputStream(f1);
                    bis = new BufferedInputStream(fis);
                    fos = new FileOutputStream(new File(f1.getPath().replace(oldpath, newpath)));
                    bos = new BufferedOutputStream(fos);
                    while ((temp=bis.read(b))!=-1){
                        bos.write(b);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (bos!=null)
                            bos.close();
                        if (fos!=null)
                            fos.close();
                        if (bis!=null)
                            bis.close();
                        if (fis!=null)
                            fis.close();

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

在主函数里建立这个类,调用copy方法传入要复制的文件信息


import java.io.File;

public class fileCopyAndZip {
    public static void main(String[] args) {
        String oldpath="E:\text";//复制的原路径
        String newpath="E:\text2";//复制的目标路径
        File file=new File(oldpath);
        getDirectory g=new getDirectory(oldpath,newpath);
        g.copy();
    }
}

经过测试确实复制了份文件,包括空白文件夹

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301607.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号