IO流—拷贝文件夹—实例

来源:互联网 发布:asp json解析 编辑:程序博客网 时间:2024/06/06 12:38
---------------------- 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