IO 字节流 实现文件及其子目录的拷贝&与字符流的比较
用IO流实现指定文件或目录的拷贝功能,如图,要将
E:\blogs
目录下的26.Git
文件夹复制到G:\test
目录下
26.Git
文件夹的属性:?
为了后面突出对比,在26.Git
中放入了纯文本文件、视频文件、图片文件、pdf文件、exe文件以及一些非空的文件夹等等,如下:?
首先,用IO字节流实现文件以及子目录的拷贝:
- 如果要连同
26.Git
这个文件也一起拷贝,那么应该先在目标路径下先创建一个空的26.Git
文件夹,并将其当成新的目标路径;如果只是想复制26.Git
内的内容,可以省略这一步; - 遍历源路径下的文件夹,将文件与子目录分开处理,文件直接拷贝,子目录再遍历,这里使用递归实现;
- 输入流实现对文件的读取功能,输出流实现对文件的写功能,拷贝我们可以理解为:从源文件读取信息,同时将读取到的信息写入到目标文件。
- 读写完成后,需要使用close()方法关闭流,先关闭输出流,再关闭输入流,这里将创建流写在了try后面的括号内,会自动帮我们关闭流。
?以下是代码实现,注释都比较详细:
import java.io.*;
/**
* 使用IO字节流拷贝 E:\blogs\26.Git 到 G:\test 目录下
*/
public class CopyDirs {
public static void main(String[] args) {
//拷贝路径,双斜杆转义,也可以写成E:/blogs/26.Git
String src = "E:\\blogs\\26.Git";
//读取源路径下的文件
File file = new File(src);
//目标路径
String dest = "G:\\test\\";
//先在目标路径下创建要复制的文件夹,即26.Git,并将G:\test\26.Git作为目标路径,file.getName 获取文件名
dest = dest + file.getName() + "\\";
//mkdir(),创建文件夹,用于有一个层级的目录不存在的情况
new File(dest).mkdir();
//获取当前系统时间,这里主要想了解拷贝花费的时间,用于比较
long start = System.currentTimeMillis();
System.out.println("开始拷贝...");
listDirs(src, dest);
System.out.println("拷贝成功!");
System.