拿来即用 ,不理解欢迎留言。
package banban.CopyOrDeleteFile;
import java.io.*;
/**
* @ClassName CopyOrDeleteFile
* @Author zhang-peng-zhan
* @Date 2018/11/8 17:40
*
* copyFile方法 需要参数 File:需要复制的文件
* newFile:复制的新文件
* copyFolder方法 需要参数 Folder:需要复制的文件夹
* newFolder:复制的新文件夹
* deleteFolder 方法 需要参数 File :需要删除的文件或者文件夹
*/
public class CopyOrDeleteFile {
public static void copyFile(File file , File newfile){
//复制的文件不止文本文件,所以采用字节流复制
//缓冲字节流,字节数组复制
try(BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(newfile))
)
{
byte[] bytes = new byte[1024];
int hasRead ;
while ((hasRead=bufferedInputStream.read(bytes))>0){
bufferedOutputStream.write(bytes,0,hasRead);
bufferedOutputStream.flush();
}
}catch (IOException e){
e.printStackTrace();
}
}
//分析:
// A:封装数据源scrFile
// B:封装目的地destFile
// C:判断scrfile是文件夹还是文件
// a:是文件夹
// 就在目的地下创建文件夹
// 获取该File对象下所有文件或者文件夹File对象
// 遍历得到每一个File对象
// 回到C
// b:是文件
// 复制(字节流)
public static void copyFolder(File scrfile,File destfile){
if (scrfile.isDirectory()){
//不是文件
// 就在目的地下创建文件夹
File newFolder = new File(destfile,scrfile.getName());
newFolder.mkdir();
//获取该File对象下所有文件或者文件夹File对象
File[] fileArray = scrfile.listFiles();
for (File file : fileArray){
copyFolder(file,newFolder); //递归
}
}else {
//是文件
//复制
File newfile = new File(destfile,scrfile.getName());
copyFile(scrfile,newfile); //调用复制文件的方法
}
}
//递归删除多级文件夹或文件
public static void deleteFolder(File file) {
if (file.isFile()){
file.delete();
}else {
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile()) {
//如果是文件就直接删除
f.delete();
} else {
//如果是文件夹就递归调用
deleteFolder(f);
}
}
//删除空目录
file.delete();
}
}