package copyFileAndFolder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFilesAndFolder{
public static String path = "G:\\abc";
public static String topath = "G:\\d";
public static void main(String[] args) throws IOException{
//创建目标文件
//if(!new File(topath).exists()){//不存在此路径
new File(topath).mkdirs();
//}
//获取源文件下的文件或目录
//listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
File[] file=new File(path).listFiles();
//length() 返回由此抽象路径名表示的文件的长度
if(file.length>0){
for(File f:file){ //f表示要把该文件夹所有的文件夹和文件跑一遍,files 表示上层目录
if(f.isDirectory()){//测试此抽象路径名表示的文件是否是一个目录
// 复制目录
//separator 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
String sourceDir=path+File.separator+f.getName();
String targetDir=topath+File.separator+f.getName();
copyDirectiory(sourceDir, targetDir);
System.out.println(path+ "\\" +f.getName()+" 目录已复制到"+topath+"\\" +f.getName());
}//if
if(f.isFile()){
// 复制文件
copyFile(f,new File(topath+File.separator+f.getName()));
System.out.println(path+"\\"+f.getName()+" 文件已复制到"+topath+"\\" +f.getName());
}//if
}//for
}//if
}//main
// 复制文件
public static void copyFile(File sourceFile,File targetFile) throws IOException{
// 新建文件输入流并对它进行缓冲
FileInputStream input = new FileInputStream(sourceFile);
BufferedInputStream inBuff=new BufferedInputStream(input);
// 新建文件输出流并对它进行缓冲
FileOutputStream output = new FileOutputStream(targetFile);
BufferedOutputStream outBuff=new BufferedOutputStream(output);
// 缓冲数组
byte[] b = new byte[1024 * 5];
int len;
while ((len =inBuff.read(b)) != -1) {
outBuff.write(b, 0, len);
}
// 刷新此缓冲的输出流 outBuff.flush();
//关闭流
inBuff.close();
outBuff.close();
output.close();
input.close();
}
// 复制文件夹 /会判断每个文件夹中是否有文件,如果有,则调用文件复制
public static void copyDirectiory(String sourceDir, String targetDir) throws IOException {
// 新建目标目录
(new File(targetDir)).mkdirs();
// 获取源文件夹当前下的文件或目录
File[] file = (new File(sourceDir)).listFiles();
for (int i = 0; i < file.length; i++) {
if (file[i].isFile()) {
// 源文件
File sourceFile=file[i];
// 目标文件
File targetFile=new File(new File(targetDir).getAbsolutePath() +File.separator+file[i].getName());
copyFile(sourceFile,targetFile);
}
if (file[i].isDirectory()) {
// 准备复制的源文件夹
String dir1=sourceDir + "/" + file[i].getName();
// 准备复制的目标文件夹
String dir2=targetDir + "/"+ file[i].getName();
copyDirectiory(dir1, dir2);
}
}//for
}//copyDirectiory
}
复制指定文件夹(包含所有子文件和子文件夹)
最新推荐文章于 2024-01-19 23:54:30 发布