package IOByte;
/**
*
* 封装:文件的拷贝
* 文件夹的拷贝
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Copy {
/**
*
* 拷贝文件
* @param srcPath
* @param destPath
* @throws IOException
*/
public static void copyFile(String srcPath,String destPath) throws IOException{
//1.建立联系: 源文件(存在且为文件) + 目的地(可以不存在)
copyFile(new File(srcPath), new File(destPath));
}
public static void copyFile(File src,File dest) throws IOException{
if(!src.isFile()||!src.exists()){
/* System.out.println(" 只能拷贝文件");
return;*/
throw new IOException("只能拷贝文件");
}
//dest为已经存在的文件夹,不能建立于文件夹同名的文件
if (dest.isDirectory()) {
//System.out.println(dest.getAbsolutePath()+"不能建立于文件夹同名的文件");
throw new IOException(dest.getAbsolutePath()+"不能建立于文件夹同名的文件");
}
//2.选择流
InputStream is=new FileInputStream(src);
OutputStream os=new FileOutputStream(dest);
//3.操作:拷贝=循环+读取+写出
byte[] flush=new byte[1024];
int len=0;
while(-1!=(len=is.read(flush))){
os.write(flush,0,len);
}
os.flush();
//关闭流
os.close();
is.close();
}
/**
* 拷贝文件夹
* @param src 源路径
* @param dest 目标路径
*/
//这一步目的:复制原文件夹的名称(根目录)到指定位置
public static void copyDir(String srcPath,String destPath){
copyDir(new File(srcPath),new File(destPath));
}
public static void copyDir(File src,File dest){
if(src.isDirectory()){
dest=new File(dest,src.getName()); //到指定目录下创建源文件夹名称及目录
}
copyDirDetail(src,dest);
}
public static void copyDirDetail(File src,File dest){
if(src.isFile()){
try {
Copy.copyFile(src, dest);
} catch (IOException e) {
e.printStackTrace();
}
}else if(src.isDirectory()){
//确保目标文件夹存在
dest.mkdirs();
//获取下一级目录|文件
for(File sub:src.listFiles()){
copyDir(sub,new File(dest,sub.getName()));
}
}
}
}