IO流学习之综合运用(文件复制)

通过File、字节流、字节流缓冲区实现文件复制

需求:

1、用File类读取指定文件File下的所有文件(包括Copy文件夹内的所有文件)

2、将所有文件复制到指定文件FileCopy夹下

需求分析:

1、需要先读取到指定的文件夹File

2、判断File文件夹下的文件类型( 文件 or 文件夹 )

3、把文件读取到内存中(递归查询文件)

4、考虑指定文件夹FileCopy下不存在Copy文件夹怎么办?(分析File类的方法)

5、把文件从内存中写到指定文件夹下

代码实例:

 1 package InputOutput;
 2 
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.FileNotFoundException;
 8 import java.io.FileOutputStream;
 9 import java.io.IOException;
10 
11 public class CopyFileDemo {
12     public static void main(String[] args) throws IOException {
13         // 指定源文件路径
14         String srcPath = "E:/JavaCodeDemo/InputOutput/File";
15         // 指定目标文件路径
16         String desPath = "E:/JavaCodeDemo/InputOutput/FileCopy";
17         // 创建源File
18         File srcFile = new File(srcPath);
19         // 创建目标File
20         File desFile = new File(desPath);
21         // 复制文件
22         copFile(srcFile, desFile);
23         // 复制完成
24         System.out.println("Success!");
25     }
26 
27     public static void copFile(File srcFile, File desFile) throws IOException {
28         // 获取所有文件和文件夹的集合
29         File[] fileList = srcFile.listFiles();
30         // 遍历集合
31         for (File file : fileList) {
32             // 判断是否为文件夹
33             if (file.isDirectory()) {
34                 // 获取文件夹名称
35                 String folderName = file.getName();
36                 // 创建目标路径File
37                 File newFile = new File(desFile, folderName);
38                 // 判断目标路径File对应的文件夹是否存在
39                 if (!newFile.exists()) {
40                     // 如果不存在创建新的文件夹
41                     newFile.mkdirs();
42                 }
43                 // 循环调用方法获取创建所有文件夹
44                 copFile(file, newFile);
45             } else {
46                 // 获取文件的名称
47                 String name = file.getName();
48                 // 根据文件名称创建新的File
49                 File finalPathFile = new File(desFile, name);
50                 // 调用IO流复制文件
51                 IOStream(file, finalPathFile);
52             }
53         }
54     }
55 
56     public static void IOStream(File file2, File finalFile) throws IOException {
57         // 创建字节输入和输出流
58         FileInputStream in = new FileInputStream(file2);
59         FileOutputStream out = new FileOutputStream(finalFile);
60         // 创建字节输入输出流缓冲区
61         BufferedInputStream Bin = new BufferedInputStream(in);
62         BufferedOutputStream Bout = new BufferedOutputStream(out);
63         // 调用方法读取数据
64         int flag = -1;
65         byte[] b = new byte[1024];
66         while ((flag = Bin.read(b)) != -1) {
67             // 调用方法写数据
68             Bout.write(b, 0, flag);
69             Bout.flush();
70         }
71         // 关闭资源,先关写再关读
72         Bout.close();
73         Bin.close();
74     }
75 }

结果:



 才疏学浅,如果有更好的方法欢迎留言指点,谢谢!

原文地址:https://www.cnblogs.com/Bernard94/p/11272853.html