使用IO流复制文件夹

IO(输入/输出)是比较抽象的,看不到明显的运行效果,但输入和输出是所有程序都必需的部分。Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在 Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream),通过流的方式允许Java程序使用相同的方式来访问不同的输入输出源。输入流是读取数据,比如说读取某个文件的数据;输出流是写入数据,比如说把数据写入到某个文件中。而使用IO流复制文件夹或文件的本质就是利用IO流的输入输出来读取和写入文件从而实现复制。

首先写个复制文件的方法,传入两个参数,File类型的起始路径和目标路径。

public static void copy(File startFile, File endFile) throws IOException,FileNotFoundException {

//判断文件或目录是否存在,不存在则不执行

      if(startFile.exists() && endFile.exists()){

//判断目标路径是否是一个目录,如果不是目录则不执行复制,只能复制到某个目录下面,不能复制到某个文件中

          if(endFile.isDirectory()){

//判断起始路径是否是一个目录,如果是目录则复制目录,如果不是目录则复制文件

             if(startFile.isDirectory()){  /*这个代码块复制目录*/

//要复制的endFile的路径拼接上startFile的目录名作为新的目标目录路径

                File fileName = new File(endFile,startFile.getName().toString());

                //创建此目录

                fileName.mkdir();

                //获取子目录和子文件

                File[] files =  startFile.listFiles();

                //循环遍历每一个子目录和子文件

                for (File file : files) {

                   //调用递归,进行复制

                   copy(file,fileName);

                }

             }else{   /*这个代码块复制文件*/

                //创建输入流

                InputStream inputStream = new FileInputStream(startFile);

                //创建一个新的空文件

                File fileName = new File(endFile,startFile.getName().toString());

                fileName.createNewFile();

                //创建输出流

                OutputStream outputStream = new FileOutputStream(fileName);

                //读取文件内容

                byte[] bs = new byte[1024];

                int count = 0;

                while ((count = inputStream.read(bs, 0, bs.length)) != -1) {

                   //将读取到的内容输出到新文件

                   outputStream.write(bs, 0, count);

                }

                inputStream.close();//关闭输入流

                outputStream.flush();//将输出流中所有数据推进到文件中

                outputStream.close();//关闭输出流

             }

          }else{

             System.out.println("只能复制到目录下,不能复制到文件下");

          }

         

      }else{

          System.out.println("文件或目录不存在");

      }

}

 

 

 

最后在主方法中调用这个复制文件的方法,传递File类型的起始路径和目标路径作为参数。

public static void main(String[] args) {

       File startFile = new File("G:/z/zz");

       File endFile = new File("G:/z/z");

       try {

           copy(startFile, endFile);

       } catch (Exception e) {

           e.printStackTrace();

       }

  }

 

执行完结果如下:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值