package copy;
/*
需求:复制多级文件夹
复制d:\\itcast(包含文件和子文件夹)到模块目录下
分析:
d:\\itcast
a.txt
b.txt
javaweb
a.xml
b.xml
模块\\itcast
javaweb
a.xml
b.xml
a.txt
b.txt
思路:
1.判断源文件是目录还是文件
2.是目录:
1.源目录名+目的目录,创建新目录File对象
2.判断新目录File是否存在,不存在则创建
3.获取源目录文件列表
4.遍历得到每个源文件对象
5.递归调用copyFolder方法
3.是文件:
复制源文件到目的目录
*/
import java.io.*;
public class CopyFolder {
public static void main(String[] args) throws IOException {
//创建源目录
File srcFolder = new File("d:\\itcast");
//创建目的目录
File dstFolder = new File("day10Home");
//调用复制方法,复制目录或文件
copyFolder(srcFolder, dstFolder);
}
/**
* 文件是否存在的检查工作,应该由方法调用者保证。
* @param src
* @param dst
* @throws IOException
*/
private static void copyFolder(File src, File dst) throws IOException {
//1.是目录
if(src.isDirectory()){
//1.源目录名+目的目录,创建新目录File对象
File newFolder = new File(dst, src.getName());
//2.判断新目录File是否存在,不存在则创建
if(!newFolder.exists())
newFolder.mkdir();
//3.获取源目录文件列表
File[] fileArray = src.listFiles();
//4.遍历得到每个源文件对象
for(File srcFile : fileArray){
//5.递归调用copyFolder方法
copyFolder(srcFile, newFolder);
}
}else{
// 2.是文件,根据目的目录+源文件名,创建新文件
File newFile = new File(dst, src.getName());
copyFile(src, newFile);
}
}
private static void copyFile(File srcFile, File newFile) throws IOException {
// 创建字节缓冲流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
// 读写数据,一次读写一个字节数组
byte[] bys = new byte[1024];
int len;
while((len = bis.read(bys)) != -1){
bos.write(bys, 0, len);
}
// 释放资源
bos.close();
bis.close();
}
}
案例2:删除多级文件夹
1 package deletefolder; 2 3 import java.io.File; 4 5 /* 6 需求: 7 将d:\\itcast多级文件夹删除 8 d:\\itcast 9 javaweb 10 a.xml 11 a.txt 12 b.txt 13 思路: 14 1.是否是目录 15 是目录: 16 2.获取文件列表 17 3.遍历文件列表得到每个文件对象 18 4.递归调用删除方法,删除目录中的每一项内容 19 2.直接删除src,此时src要么是空目录,要么是文件。 20 21 */ 22 public class DeleteFolder { 23 public static void main(String[] args) { 24 //创建要删除的多级目录 25 File file = new File("day10Home\\itcast"); 26 27 //调用方法删除多级目录 28 deleteFolder(file); 29 30 } 31 32 private static void deleteFolder(File src) { 33 //1.是否是目录 34 if(src.isDirectory()){ 35 //2.获取文件列表 36 File[] fileArray = src.listFiles(); 37 38 //3.遍历文件列表得到每个文件对象 39 for(File file : fileArray){ 40 //4.递归调用删除方法,删除目录中的每一项内容 41 deleteFolder(file); 42 } 43 } 44 //5.将src删除,此时src要么是空目录,要么是文件。 45 src.delete(); 46 } 47 }