前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第6次文章:利用IO流,对文件和文件夹进行拷贝操作

第6次文章:利用IO流,对文件和文件夹进行拷贝操作

作者头像
鹏-程-万-里
发布2019-09-27 14:22:31
5760
发布2019-09-27 14:22:31
举报

最近两周在家,学习效率大打折扣,所以这两周的学习总结不是那么丰富,有点简单,希望各位小伙伴儿多多包涵啊

下周就回学校了,一切都会恢复过来的,大家一起加油哦
利用上周学习到的IO流的读取和写出操作,进一步可以将读取和写出进行联合使用,实现对文件以及文件夹的拷贝操作。

对文件的复制操作主要分四步进行:

1、与源文件进行关联

2、选择读取和写出字节流

3、选择相应的读取字节长度,并且将读取出来的字节数组写出到指定的目标文件中

4、依次关闭写出资源,以及读取资源

对文件进行复制拷贝,下面是相应的源码:

代码语言:javascript
复制
public static void fileCopy(String srcPath,String destPath) {
        //1、与源文件和目标文件建立联系(确保源文件存在)目标文件可以不存在
        fileCopy(new File(srcPath),new File(destPath));
    }   

public static void fileCopy(File src,File dest) {
        //2、选择相应的流
        InputStream is = null;//创建输入流,提升作用域
        OutputStream os = null;//创建输出流,提升作用域
        try {
            is = new FileInputStream(src);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("源文件不存在");
        } 
        try {
            os = new FileOutputStream(dest,true);//以追加的方式写出
        }catch (FileNotFoundException e ) {
            e.printStackTrace();
            System.out.println("目标文件关联失败");
        }
        //3、操作
        byte[] flush = new byte[1024];//定义每次读取和写入的大小
        int len = 0 ;//定义每次读取的实际大小
        try {
            while(-1!=(len=is.read(flush))) {
                os.write(flush, 0, len);
            }
            os.flush();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件读取失败");
        }finally {
            //4、关闭资源:先关闭最后打开的资源
            try {
                os.flush();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("关闭目标文件资源失败");
            }
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("关闭源文件资源失败");
            }
        }
    }

在对文件的复制操作中,与上一周的内容(单独进行写出操作)相比,由于在读取的时候已经是使用了字节数组进行读取,所以在写出的时候不需要对字节流进行强制转化,可以直接将字节数组写出到目标文件中。

对文件夹进行拷贝的基本步骤:

1、在拷贝文件夹的时候,首先需要对源文件夹进行类型判断,是文件还是文件夹

2、在源文件目录是文件的时候,可以直接调用上述封装的fileCopy方法进行文件的复制。

3、若源文件是文件夹的时候,应该利用递归的方式,检查子孙级文件,然后将文件夹中的子孙级文件写出到目标文件夹中。

文件夹拷贝的源码:

代码语言:javascript
复制
public static void copyDir(String srcPath,String destPath) {
        File srcDir = new File(srcPath);
        File destDir = new File(destPath,srcDir.getName());
        copyDirDetails(srcDir,destDir);
    }
    
public static void copyDirDetails(File srcDir,File destDir) {
        if (srcDir.isFile()) {//src是文件
            FileUtil.fileCopy(srcDir, destDir);
        }else if (srcDir.isDirectory()) {//src是文件夹
            //确保目标文件夹的路径存在
            destDir.mkdirs();
            //获取下一级文件
            for (File sub:srcDir.listFiles()) {
                copyDirDetails(sub,new File(destDir,sub.getName()));
            }
        }
    }

在进行文件夹拷贝时,如果判断出源文件为文件夹类型,那么首先应该确保目标文件夹存在,所以我们需要先建立目标文件夹的路径,此处调用的是mkdirs方法,此方法可以直接建立文件的路径,而不需要逐级建立相关的文件夹,比mkdir方法更加方便快捷。所以此处选择mkdirs方法进行建立相应的文件夹路径。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java小白成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档