package copydir;
import java.io.*;
/*
需求:
把E:\\itcast 这个文件夹复制到模块目录下
思路:
1:创建数据源目录File对象,路径是E:\\itcast
2:获取数据源目录File对象的名称(itcast)
3:创建目的地目录File对象,路径名是模块名+itcast组成(myCharStream\\itcast)
4:判断目的地目录对应的File是否存在,如果不存在,就创建
5:获取数据源目录下所有文件的File数组
6:遍历File数组,得到每一个File对象,该File对象,其实就是数据源文件
数据源文件:E:\\itcast\\mn.jpg
7:获取数据源文件File对象的名称(mn.jpg)
8:创建目的地文件File对象,路径名是目的地目录+mn.jpg组成(myCharStream\\itcast\\mn.jpg)
9:复制文件
由于文件不仅仅是文本文件,还有图片,视频等文件,所以采用字节流复制文件
*/
public class Copyss {
public static void main(String[] args) throws IOException {
String f = "D:\\photo";
File srcDir = new File(f);
String name = srcDir.getName();
// System.out.println(name);
// 创建 目的地对象
File destDir = new File("stu\\src\\Copp");
copayDir(srcDir,destDir);
}
// 复制文件夹
private static void copayDir(File srcDir, File destDir) throws IOException {
// 判断文件是否存在
if(!destDir.exists()){
destDir.mkdirs();
}
if(srcDir.isDirectory()){
String srcname = srcDir.getName();;
File newfolder = new File(destDir,srcname);
if(!newfolder.exists()){
newfolder.mkdirs();
}
File[] filearray = srcDir.listFiles();
for (File file:filearray){
copayDir(file,newfolder);
}
}else{
File newFile = new File(destDir,srcDir.getName());
CopyFile(srcDir,newFile);
}
}
private static void CopyFile(File srcFile, File destFile) throws IOException {
// 输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] bys = new byte[1024];
int len;
while ((len = bis.read(bys)) != -1){
bos.write(bys,0,len);
}
bos.close();
bis.close();
}
}
注释版
package com.itheima_08;
import java.io.*;
/*
需求:
把“E:\\itcast”复制到 F盘目录下
思路:
1:创建数据源File对象,路径是E:\\itcast
2:创建目的地File对象,路径是F:\\
3:写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
4:判断数据源File是否是目录
是:
A:在目的地下创建和数据源File名称一样的目录
B:获取数据源File下所有文件或者目录的File数组
C:遍历该File数组,得到每一个File对象
D:把该File作为数据源File对象,递归调用复制文件夹的方法
不是:说明是文件,直接复制,用字节流
*/
public class CopyFoldersDemo {
public static void main(String[] args) throws IOException {
//创建数据源File对象,路径是E:\\itcast
File srcFile = new File("E:\\itcast");
//创建目的地File对象,路径是F:\\
File destFile = new File("F:\\");
//写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
copyFolder(srcFile,destFile);
}
//复制文件夹
private static void copyFolder(File srcFile, File destFile) throws IOException {
//判断数据源File是否是目录
if(srcFile.isDirectory()) {
//在目的地下创建和数据源File名称一样的目录
String srcFileName = srcFile.getName();
File newFolder = new File(destFile,srcFileName); //F:\\itcast
if(!newFolder.exists()) {
newFolder.mkdir();
}
//获取数据源File下所有文件或者目录的File数组
File[] fileArray = srcFile.listFiles();
//遍历该File数组,得到每一个File对象
for(File file : fileArray) {
//把该File作为数据源File对象,递归调用复制文件夹的方法
copyFolder(file,newFolder);
}
} else {
//说明是文件,直接复制,用字节流
File newFile = new File(destFile,srcFile.getName());
copyFile(srcFile,newFile);
}
}
//字节缓冲流复制文件
private static void copyFile(File srcFile, File destFile) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] bys = new byte[1024];
int len;
while ((len = bis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
bos.close();
bis.close();
}
}