A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

会算命的码农

初级黑马

  • 黑马币:17

  • 帖子:8

  • 精华:0

© 会算命的码农 初级黑马   /  2015-4-12 21:36  /  458 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. <P> import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;</P>
  7. <P>/**
  8. * 这是拷贝文件的类
  9. *
  10. * @author ZhangZhiHui
  11. *
  12. */
  13. public class Copy {
  14. /**
  15.   * 拷贝文件或者文件夹
  16.   *
  17.   * @param source
  18.   *            被拷贝的源文件
  19.   * @param destination
  20.   *            拷贝的目的文件
  21.   * @throws IOException
  22.   *             异常
  23.   */
  24. public static void copy(String source, String destination)throws IOException {
  25.   //实例化源文件
  26.   File srcFile = new File(source);
  27.   //实例化目标文件
  28.   File dntFile = new File(destination);
  29.   //声明输入字节流对象
  30.   BufferedInputStream bis;
  31.   //声明输出流对象
  32.   BufferedOutputStream bos;
  33.   
  34.   //判断源文件是否存在,如果不存在输出一句话
  35.    if(srcFile.exists()==false){
  36.    System.out.println("不好意思,文件不存在!!!");
  37.   }
  38.   
  39.   /*
  40.    * 下面是源文件不是文件夹的情况下
  41.    * 目标文件有三种情况:
  42.    * 一.是文件夹
  43.    *   判断文件夹是否存在,不存在就创建,然后在复制源文件到目标文件
  44.    * 二.是文件
  45.    *   判断文件是否存在,不存在就创建,然后复制
  46.    *
  47.    */
  48.   
  49.   // 判斷源文件是否是文件夾,如果不是則進入代碼塊
  50.   if (!srcFile.isDirectory()) {
  51.    
  52.    //一.判斷目標文件是否是文件夾,is true則執行
  53.    if (dntFile.isDirectory()) {
  54.    
  55.      //判斷:如果這個文件夾不存在就創建此文件夾
  56.       if (dntFile.exists()==false) {
  57.       
  58.       dntFile.createNewFile();
  59.       
  60.      }
  61.      // 创建输入流并抓取源文件
  62.      bis = new BufferedInputStream(new FileInputStream(srcFile));
  63.      
  64.      /*
  65.       * 创建输出流并抓取目标文件; 把源文件複製在目標文件夾里
  66.       * 思路: 1.重新創建目標文件:  用getPath獲得原有的路徑在追加源文件的文件名
  67.       *      2.複製文件:   用出入流讀取源文件,然後用輸出流寫在目標文件里
  68.       */
  69.      
  70.      //1.重建目標文件夾
  71.      File file = new File(dntFile.getPath()+"<A href='file://\\"+srcFile.getName'>\\"+srcFile.getName</A>());
  72.      file.createNewFile();
  73.      
  74.      //2.複製文件
  75.      
  76.      //創建輸出流
  77.      bos = new BufferedOutputStream(new FileOutputStream(file));
  78.      // 声明并把在源文件读到的内容赋给content变量
  79.      int content = bis.read();
  80.      while (content != -1)// 判断是否还有内容可读
  81.      {
  82.       bos.write(content);
  83.       content = bis.read();
  84.      }
  85.      bis.close();
  86.      bos.close();
  87.      
  88.    }else{
  89.      //二.目標文件是文件則進入
  90.      
  91.      //判斷目標文件如果不存在,就創建此文件
  92.       if (dntFile.exists()==false) {
  93.       dntFile.mkdirs();
  94.      }
  95.      // 创建输入流并抓取源文件
  96.      bis = new BufferedInputStream(new FileInputStream(srcFile));
  97.      
  98.      // 创建输出流并抓取目标文件
  99.      bos = new BufferedOutputStream(new FileOutputStream(dntFile));
  100.      
  101.      // 声明并把读到的内容赋给content变量
  102.      int content = bis.read();
  103.      while (content != -1)// 判断是否还有内容可读
  104.      {
  105.       //输出文件内容
  106.       bos.write(content);
  107.       
  108.       //接收读到的内容
  109.       content = bis.read();
  110.      }
  111.      
  112.      //关闭流
  113.      bis.close();
  114.      bos.close();
  115.      
  116.     }
  117.    
  118.    
  119.    /*
  120.     * 下面情况是源文件是文件夹的时候
  121.     * 源文件是文件夹,目标文件就有三种可能分别是:
  122.     * 一.是文件夹
  123.     *   判断是否存在,不存在创建
  124.     *   如果是文件,就把源文件夹复制到目标文件
  125.     * 二.是文件
  126.     *
  127.     *   如果是文件就输出一句话 :"被拷贝的是文件夹,文件夹不能放在文件里"
  128.     *
  129.     *
  130.     */
  131.    
  132.    //如果源文件是文件夹进入
  133.   } else if (srcFile.isDirectory()) {
  134.    
  135.    /*
  136.     * 一.是文件夹
  137.     *  思路:
  138.     *   1.首先重建目标文件用getPath获取目标文件的绝对路径,然后追加源文件路径,用源文件的getName方法获得文件名并创建
  139.     *   2.用listFiles方法获得源文件的所有文件名,在目标文件夹中重新创建源文件中的文件,最后复制内容
  140.     */
  141.    
  142.     //1.重建文件
  143.     File file= new File(dntFile.getPath()+"<A href='file://\\"+srcFile.getName'>\\"+srcFile.getName</A>());
  144.    
  145.     //新建文件夹
  146.     file.mkdirs();
  147.    
  148.     //2.获得源文件文件名集合
  149.     File[] files=srcFile.listFiles();
  150.    
  151.     //如果不是空文件时
  152.     if (files!=null) {
  153.      //循环创建文件输出流和文件输出流
  154.      for (int i = 0; i < files.length; i++) {
  155.       //输入流
  156.       BufferedInputStream bis2 = new BufferedInputStream(new FileInputStream(new File(srcFile.getPath()+"<A href='file://\\"+files[i].getName'>\\"+files[i].getName</A>())));
  157.       //输出流
  158.       BufferedOutputStream bos2 = new BufferedOutputStream(new FileOutputStream(new File(file.getPath()+"<A href='file://\\"+files[i].getName'>\\"+files[i].getName</A>())));
  159.       
  160.       //content变量接收读到的内容
  161.       int content = bis2.read();
  162.       while (content != -1)// 判断是否还有内容可读
  163.       {
  164.        //输出内容到目标文件
  165.        bos2.write(content);
  166.        content = bis2.read();
  167.       }
  168.       
  169.       //二.判断目标文件是否是文件,是文件执行
  170.       if (dntFile.isDirectory()==false) {
  171.        System.out.println("被拷贝的是文件夹,文件夹不能放在文件里");
  172.       }
  173.       //关闭流
  174.       bis2.close();
  175.       bos2.close();
  176.      }
  177.      
  178.      
  179.     }
  180.   }
  181.   
  182. }</P>
  183. <P>}
  184. </P>
复制代码

8 个回复

倒序浏览
java的文件读取,比起C++的两个框架,java的IO更繁琐些。不过注释写的挺详细
回复 使用道具 举报
拷贝文件夹的时候没有考虑递归啊 另外对于楼主的繁体注释表示好奇
回复 使用道具 举报
6666666666666
回复 使用道具 举报
你的整体排版还不是完美    公司一般对代码的格式要求很严格
回复 使用道具 举报
哈哈,写的不错啊,继续加油。
回复 使用道具 举报
叶松ye 来自手机 中级黑马 2015-4-13 17:46:26
7#
好0000000
回复 使用道具 举报
不错不错。。。
回复 使用道具 举报
lai19 中级黑马 2015-4-23 09:38:23
9#
还没学到输入流。看不懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马