zoukankan      html  css  js  c++  java
  • java——用递归和IO流来实现文件的复制

     1 import java.io.ByteArrayInputStream;
     2 import java.io.ByteArrayOutputStream;
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.FileOutputStream;
     6 import java.io.IOException;
     7 import java.io.InputStream;
     8 import java.io.OutputStream;
     9 
    10 /**
    11  * 文件的复制:
    12  *         思路:通过递归实现文件目录的复制,通过流的来复制文件。
    13  *         方法:
    14  *             1.遍历目录和文件,如果为目录则先复制目录及其子目录到指定目录下。
    15  *             2.如果非目录则通过流的形式将该目录下的文件复制到指定目录下。
    16  *             3.调用自身方法,实现递归。
    17  *             4.如此实现复制目录及其目录下的所有子目录和文件到指定目录下。
    18  *         用到的技术:
    19  *             用File类来实现文件目录的复制。IO流来实现文件文本的复制
    20  * @author user
    21  *
    22  */
    23 
    24 public class CopyFileTest {
    25 
    26     public static void main(String[] args) {
    27         String srcPath = "E:\Workspaces\day16";
    28         String destPath = "F:\Workspaces\day16";
    29         File src = new File(srcPath);        //源文件
    30         File dest = new File(destPath);        //目的文件
    31         
    32         try {
    33             copyFolder(src, dest);
    34         } catch (IOException e) {
    35             // TODO Auto-generated catch block
    36             e.printStackTrace();
    37         }
    38         System.out.println("程序执行完毕");
    39     }
    40     
    41     private static void copyFolder(File src, File dest) throws IOException {
    42         if (src.isDirectory()) {            //判读是否目录
    43             if (!dest.exists()) {            //判断路径名是否存在
    44                 dest.mkdirs();                //创建文件目录及其子目录
    45             }
    46             //src.list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
    47             String files[] = src.list();    //创建字符串数组,存储文件路径
    48             //遍历文件目录
    49             for (String file : files) {
    50                 //根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
    51                 File srcFile = new File(src, file);
    52                 File destFile = new File(dest, file);
    53                 // 递归复制
    54                 copyFolder(srcFile, destFile);
    55             }
    56         } else {
    57             //创建流对象
    58             InputStream in = new FileInputStream(src);
    59             OutputStream out = new FileOutputStream(dest);
    60             
    61             //创建一个byte数组用做缓冲区
    62             byte[] buffer = new byte[1024];
    63             
    64             //将数据加入buffer数组
    65             in.read(buffer);
    66             
    67             //将数据加载入缓存区中
    68             ByteArrayInputStream bis = new ByteArrayInputStream(buffer);
    69             
    70             //实例化一个ByteArrayOutputStream
    71             ByteArrayOutputStream bos = new ByteArrayOutputStream();
    72             
    73             //定义一个字符串数据
    74             String str = bis.toString();
    75             //定义一个byte[]数组
    76             byte[] b = str.getBytes();
    77             //将b的内容拷贝到缓冲区
    78             bos.write(b, 0, b.length);
    79             //获取当前缓冲区的大小
    80             System.out.println(bos.size());
    81     
    82             //将缓冲区的数据写入到OutputStream中
    83             bos.writeTo(out);
    84             
    85             //关闭流
    86             in.close();
    87             out.close();
    88         }
    89     }
    90 
    91 }
  • 相关阅读:
    Python学习之旅(十二)
    Python学习之旅(十一)
    Python学习之旅(十)
    Python学习之旅(十)
    Python学习之旅(九)
    Python学习之旅(八)
    WPF 画刷应用
    WP8 学习 在APP.XAML中加入Resources
    WP8 学习 ApplicationBar 的创建 XAML代码
    WP8 学习 Onnavigatedto和OnnavigatedFrom的区别
  • 原文地址:https://www.cnblogs.com/rsdqc/p/5385112.html
Copyright © 2011-2022 走看看