package cn.IO.test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 需求:将文件夹下的所有内容复制到指定文件夹(所有文件或文件夹复制到指定文件夹)
*
* 数据源:e:\\javademo
* 目的地:e:\\javademocopy
*
*/
public class CopyTest {
public static void main(String[] args) throws IOException {
// 创建封装数据源对象
File srcFolder = new File("e:\\javademo");
// 创建封装目的地对象
File destFolder = new File("e:\\javademocopy");
// 先判断目的地是否存在,不存在就创建
if (!destFolder.exists()) {
destFolder.mkdirs();
}
copytools(srcFolder, destFolder);
}
// 对文件夹下的文件和文件夹分别进行处理
private static void copytools(File srcFolder, File destFolder) throws IOException {
// 将数据源中保存到数组
File[] file = srcFolder.listFiles();
// 文件对象遍历
for (File f : file) {
// 判断文件对象是否是文件夹
if (f.isDirectory()) {
// 是文件夹,先创建新的目的地文件对象,再在目的地创建同名文件夹
File newFolder = new File(destFolder, f.getName());
newFolder.mkdir();
// 递归对文件夹下的文件夹...进行处理
copytools(f, newFolder);
} else {
File newfile = new File(destFolder, f.getName());
// 调用缓冲区字节流方法进行文件复制
copyfile(f, newfile);
}
}
}
// 使用缓冲区字节流复制文件
private static void copyfile(File f, File newfile) throws IOException {
// 创建字节缓冲区输入流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
// 创建字节缓冲区输出流对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newfile));
// 创建字节数组用于存储读取数据
byte[] b = new byte[1024];
// 创建变量,用于判断是否读取完成及保证写入数据长度,防止写入长度超出实际长度(由于读取数据的末尾,可能末尾数据不足以覆盖上一次数组中保存的数据)
int len;
// 循环将复制的数据写入文件
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
}
// 关闭流对象,释放资源
bis.close();
bos.close();
}
}
08-06
175
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-20
235
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)