通过Java中的IO流,实现文件夹的复制和删除。
为了方便起见,打包成了工具类。
- 该类中有三个方法: 采用字节流方式,可以读取所有格式的文件。(字符流的底层是字节流+编码的方式实现的)
- CopyFolder 复制目标文件夹。 两种情况:源文件下无文件夹 和 源文件下有嵌套文件夹。
- CopyFile 复制目标文件夹下的文件。 用FileInputStream 读取源文件文件 ,FileOutputStream流 写入目标文件路径。
- DeleteFolder 删除目标文件。
- 需要调用的File类方法:
- 判断功能:
- public boolean isDirectory() 判断是否是目录,而不是文件。
- public boolean isFile() 判断是否是文件,而不是目录。
- 获取功能:
- public File[] listFiles() 获取指定目录下的所有文件或者文件夹的File数组 。
- 创建功能:
- public boolean mkdir() 创建文件夹。如果存在这样的文件夹,就不创建了 注意这个方法只能创建单层目录 如果创建多层目录,得一层一层创建。
- 删除功能:
public boolean delete() 删除当前目录或文件。
package CopyorDelete;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author Prince、
* @date 2020/2/15
*/
// 参数说明:
// File srcFloder 源文件夹(被复制)
// File aimFloder 目标文件夹(被生成)
// 方法说明:
// CopyFolder 复制文件夹操作 两种:源文件下无文件夹 和 源文件下有嵌套文件夹。
// CopyFile 复制文件夹下的文件,用FileInputStream 读取源文件文件 FileOutputStream流 写入目标文件路径。
// DeleteFolder 删除目标文件。
public class MyUtils {
//复制文件夹操作 两种:源文件下无文件夹 和 源文件下有嵌套文件夹
public static void CopyFolder(File srcFloder, File aimFloder) throws IOException {
//复制操作
//1.先获取目标文件夹下的所有文件和文件夹
File[] files = srcFloder.listFiles();
//2.遍历每个文件进行复制
for (File file : files) {
// 如果是文件
if (file.isFile()){
//复制每一个文件
CopyFile(file,aimFloder);
//如果是目录,不是文件
}else if (file.isDirectory())
{
//封装源文件夹,封装目标文件夹,递归调用
//如果不是文件,就在目的地下创建文件夹
File aim2Floder = new File(aimFloder,srcFloder.getName());
aim2Floder.mkdir();
//递归调用, 当前文件,目标文件夹下新的文件夹目录
CopyFolder(file,aim2Floder);
}
}
}
public static void CopyFile(File file, File aimFloder) throws IOException {
//封装源文件
FileInputStream in = new FileInputStream(file);
//封住目标文件
FileOutputStream out = new FileOutputStream(new File(aimFloder,file.getName()));
//用字节数组 读取文件内容并输出写入到目标文件夹下
int len = 0;
byte[] bytes = new byte[8*1024];
while ((len = in.read())!=-1){
out.write(bytes,0,len);
out.flush();
}
out.close();
}
public static void DeleteFolder(File file) {
//如果是文件
if(file.isFile()){
//删除文件
file.delete();
//如果不是文件,是文件夹
}else if(file.isDirectory()) {
File[] files = file.listFiles();
for (File file1 : files) {
//如果是文件,删除删除文件
if(file1.isFile()){
file1.delete();
//如果不是文件,是是文件夹
}else if(file1.isDirectory()){
DeleteFolder(file1);
}
//删除空文件夹
file.delete();
}
}
}
}
使用说明:选择需要实现的功能,传参调用即可。