package CopyDirectory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Copy {
public static void main(String[] args){ //主函数
File f = new File("E:\\QQ"); //拷贝源文件
copyDirection(f,"G:\\QQ");
System.out.println("复制成功"); //拷贝完成则打野复制成功
}
public static void copyDirection(File f,String str){ //实现目录拷贝
File fstr = new File(str);
if(fstr.exists() == false){ //若目的目录不存在
fstr.mkdirs(); //则创建目录(多重目录也可以)
}
File[] F = f.listFiles(); //获取目录下所有文件
for(int i=0;i<F.length;i++){ //遍历所有文件
if(F[i].isDirectory()){ //如果是文件夹
copyDirection(F[i],str + "\\" + F[i].getName());//拷贝这个文件夹
}
else if(F[i].isFile()){ //如果是文件
copyFile(F[i],str); //拷贝文件
}
}
}
public static void copyFile(File F,String str){ //实现文件拷贝
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream(F.getAbsolutePath()); //源文件
fos = new FileOutputStream(str+"\\"+F.getName()); //目的文件路径
int readnum;
byte[] b = new byte[1024 * 1024 * 5]; //每次拷贝的数据量大小
while((readnum = fis.read(b)) != -1){ //读取数据
fos.write(b,0,readnum); //写入数据
}
fos.flush(); //清空缓冲区
}
catch(Exception e){ //异常处理
System.out.println("获取文件 "+F.getName()+" 失败");
System.out.println("文件路径:"+F.getAbsolutePath());
}
finally{
if(fis != null || fos != null){
try{
fis.close(); //关闭文件流
} catch(Exception e){
System.out.println(F.getName() + "关闭异常");
}
try{
fos.close(); //关闭文件流
}catch(Exception e){
System.out.println(str + "关闭异常");
}
}
}
}
}
package CopyDirectory;
public class FileException extends Exception{ //文件异常类
public FileException(){
}
public FileException(String str){
super(str);
}
}
运行结果: