javaIO流实现文件拷贝

javaIO流其他流的练习
要求:
如c盘作业文件夹下分别有文本文档,子目录(子目录下有其他子目录和文本文档的文件)、图片格式文件。
在这里插入图片描述
如上涉及到的不止是文本,还有图片和子目录
所以要用到字节流FileInputStream ,FileOutputStream。当然也可以用缓冲流。

涉及多重子文件目录
需要用迭代

文件夹包括目录名和具体文件
对于目录,我们只需在路径生成就行
对于具体文件,我们要在对应的目录下面将其拷贝过去

对于抽象文件的处理,我们使用File
该类有关于文件的处理,如获取绝对路径,获取文件名等

private static void CopyDir(File filesrc, File filedest){
        if(filesrc.isFile()){
            //是文件先拷贝,再跳出该次递归,否则即为目录,进入目录操作。
            //System.out.println(filesrc.getAbsolutePath());
            //是文件就进行拷贝处理
            copyfile(filesrc,filedest);
            return;
        }
        File temFile=null;

        File[] files=filesrc.listFiles();
        for (File f:files) {//文件或目录

            File newdest=null;
            File newsrc=null;

            if(f.isDirectory()){
                /*当f是目录中的一个子目录时 进入*/
                String name=f.getName();
                String destDir=filedest.getAbsolutePath().endsWith("\\")?(filedest.getAbsolutePath()+name):(filedest.getAbsolutePath()+"\\"+name);
                /*System.out.println(destDir);*/
                //在拷贝路径中生成新的目录
                newdest=new File(destDir);
                if(!newdest.exists())
                    newdest.mkdirs();

                /*String srcDir=f.getAbsolutePath().endsWith("\\")?f.getAbsolutePath():(f.getAbsolutePath()+"\\");*/
                String srcDir=f.getAbsolutePath();
                System.out.println(srcDir);
                newsrc=new File(srcDir);
                temFile=newdest;//更新拷贝路径
                CopyDir(newsrc,temFile);

            }
            //temFile=newdest;
            /*当目录下的是一个文件时  进入下一次循环,然后直接拷贝*/
            if(!(f.isDirectory())){
                CopyDir(f,filedest);
            }

        }
    }

关于文件的拷贝涉及到的文件流,开头第一篇文章有,这里再次写一下

private static void copyfile(File src,File dest){
        FileInputStream fileInputStream=null;
        FileOutputStream fileOutputStream=null;
        String txt=dest.getAbsolutePath().endsWith("\\")?dest.getAbsolutePath():(dest.getAbsolutePath()+"\\")+src.getName();
       System.out.println(txt);
        try{
            fileInputStream=new FileInputStream(src);
            fileOutputStream=new FileOutputStream(txt);

            byte[] bytes=new byte[1024*1024];
            int readcount;
            while ((readcount=fileInputStream.read(bytes))!=-1){
                fileOutputStream.write(bytes,0,readcount);
            }

            fileOutputStream.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fileInputStream!=null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fileOutputStream!=null){
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
   }

主函数

public static void main(String[] args) {
        File filesrc=new File("C:\\Users\\wish_cai\\Pictures\\作业");
        File filedest=new File("D:\\bilibili\\JJDown\\Download\\Java零基础教程视频(适合Java 0基础,Java初学入门)\\copy\\");
        CopyDir(filesrc,filedest);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值