IO流—拷贝文件夹—实例

---------------------- android培训java培训、期待与您交流! ----------------------

IO流—拷贝文件夹—实例

package com.darkhorse.admissiontest;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;


/ *
*复制一个文件夹,包括文件夹内的所有内容
*
* 思路:
* 1,定义控制台中输入,要被复制的文件夹路径,并判断文件夹是否存在;如果文件夹不存在用do while循环重新输入文件夹路径
 * 2,再在控制台上输入新复制的文件夹路径,同时也判断文件夹是否存在,如果不存在则创建一个文件夹。
* 3,复制文件
* */

public class CopyFolder {
     public static void main(String[] args){
          copyFolder();
     }
    
     /*     复制文件夹     */
     public static void copyFolder(){

          Scanner scan = null; // 定义一个空的文本扫描器
          File file = null; // 定义一个空的文件路径名

          System.out.println("请输入要复制的文件夹路径," + "如:D:copy\\copy");

          /* 在控制台中输入文件夹路径,并判断输入的路径是否存在,如不存在就重新输入路径 */
          do {
               scan = new Scanner(System.in); // 读取Systm.in输入的字符串
               file = new File(scan.nextLine()); // 把scan读取的字符串代入File中,就能得到相对路径

               if (file.exists() == false) // exitsts()为判断file路径是否等于false
                    System.out.println("你输入的路径不存在:请重新输入"); // 如等于false,则请示输入路径错误要重新输入
          } while (file.exists() != true);

          System.out.println("请输入要复制到的位置的路径:如:D:copy\\copy");

          String s = scan.nextLine();
          File fileS = new File(s);
         
          copyDirectory(file, fileS);
     }
    
     /*     复制目录     */
     static void copyDirectory(File file, File fileS){
          /* 判断file此路径是文件还是目录,如果是返回true,否则返回false */
          if (file.isDirectory()) {
               /* 判断新目录是否存在,如果不存在则创建一个 */
               if (!fileS.exists()) { // exists():判断此文件或者目录是否存在,如果存在返回true;否则返回
                                             // false
  //                   fileS.mkdir(); // mkdir():创建此抽象路径文件目录
                       fileS.mkdirs();     //mkdirs():创建此抽象路径文件目录,包括不存在的父目录
               }
               // list():返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
               String[] children = file.list();
               for (int i = 0; i < children.length; i++) {
                    copyDirectory(new File(file, children[i]), new File(fileS,
                              children[i]));
               }
          } else {
               // 把file与fileS路径代入copyFile()方法中,开始复制文件
               copyFile(file, fileS);
          }
     }

     /* 复制文件,file路径为被复制路径,fileS路径为被复制到的路径 */
     static void copyFile(File file, File fileS) {
          //创建两个空的输入、输出流
          BufferedInputStream bufIn = null;
          BufferedOutputStream bufOut = null;
          try {
               //把文件路径传入给输入、输出流中
               bufIn = new BufferedInputStream(new FileInputStream(file));
               bufOut = new BufferedOutputStream(new FileOutputStream(fileS));
              
               byte[] b = new byte[4 * 1024];          // 创建一个数组,数组长度为4K
               int len;                                   //定义一个整数类型len.
               // 使用while循环语句,用read方法读取缓冲区输入流的数据,用write方法将数据写入数组b中。
               while ((len = bufIn.read(b)) > 0) {    
                    bufOut.write(b, 0, len);
               }
          } catch (IOException e) {
               throw new RuntimeException("复制文件失败");
          } finally {
               try {
                    bufIn.close();
               } catch (Exception e) {
                    throw new RuntimeException("bufIn输出流关闭失败");
               }try {
                    bufOut.close();
               } catch (Exception e2) {
                    throw new RuntimeException("bufOutj输入流关闭失败");
               }
          }
     }
}



---------------------- android培训java培训、期待与您交流! ----------------------
详细请查看: http://edu.csdn.net/heima
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值