使用IO流复制文件夹(包括子目录)

时间:2021-05-26 20:59:48

IO流用于处理设备上的数据(包括硬盘,内存,键盘录入)。

IO流可根据流向不同分为输入流和输出流,根据处理数据类型不同分为字节流和字符流。

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。

字节流和字符流的区别:

a.读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

b.处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

使用IO流复制文件夹(包括子目录)使用IO流复制文件夹(包括子目录)使用IO流复制文件夹(包括子目录)使用IO流复制文件夹(包括子目录)

 使用IO流复制文件夹(包括子目录)思路和步骤: 对于文件夹的复制,分2种情况

  (1)当我们对文件进行遍历的时候,如果目标文件夹下的文件是个标准文件的话,我们就可以直接去做复制的动作,

  (2)当目标文件中,是带有文件夹的文件,那么这个时候就需要对文件夹进行递归,直到最后它是个标准文件后,我们在做复制动作

代码演示:

 1 package liu;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 
 9 public class CopyDirectory {
10     /**
11      * 复制文件的方法
12      * @param src:源文件
13      * @param dest:目标文件
14      */
15     public static void copyFile(File src,File dest) {
16         try {
17             //实例化文件输入流和文件输出流对象
18             FileInputStream fis = new FileInputStream(src);
19             FileOutputStream fos = new FileOutputStream(dest);
20             //定义接收源文件数组
21             byte[] buf = new byte[(int) src.length()];
22             //从源数据中读取数据
23             fis.read(buf);
24             //把数据写入到目标文件中
25             fos.write(buf);
26             //关闭流
27             fos.close();
28             fis.close();
29         } catch (FileNotFoundException e) {
30             // TODO Auto-generated catch block
31             e.printStackTrace();
32         } catch (IOException e) {
33             // TODO Auto-generated catch block
34             e.printStackTrace();
35         }
36     }
37     /**
38      * 复制目录的方法
39      * @param src
40      * @param dest
41      */
42     public static void copyDir(File src,File dest) {
43         dest.mkdir();
44         File[] files = src.listFiles();
45         for (File file : files) {
46             if(file.isFile()) {
47                 copyFile(file, new File(dest.getAbsolutePath()+File.separator+file.getName()));
48             }
49             if(file.isDirectory()) {
50                 copyDir(file, new File(dest.getAbsolutePath()+File.separator+file.getName()));
51             }
52         }
53     }
54     public static void main(String[] args) {
55         //创建文件对象和指定的文件相关联
56         File src = new File("D:\\HBuilder_7.5");
57         File dest = new File("E:\\"+src.getName());
58         //创建目录
59         dest.mkdir();
60         //找到源目录下所有文件
61         File[] fs = src.listFiles();
62         //遍历
63         for (File f : fs) {
64             //如果是文件调用复制文件的方法
65             if(f.isFile()) {
66                 copyFile(f, new File(dest.getAbsolutePath()+File.separator+f.getName()));
67             }
68             //如果是目录调用复制目录的方法
69             if(f.isDirectory()) {
70                 copyDir(f, new File(dest.getAbsolutePath()+File.separator+f.getName()));
71             }
72         }
73     }
74 }