首先,得在目标目录下创建一个与源文件夹名称相同的文件夹
遍历源文件夹中的所有文件对象,判断子文件是目录还是文件
如果是目录,递归调用第一步的操作
如果是文件,用缓冲流文件字节流完成对文件的复制
创建源和目标File f = new File("路径");
创建输入流和输出流对象,肯定得传上面的源和目标
输入输出操作,输入操作得定义一个缓冲数组和定义一个返回读取长度的len
关闭流
完成
代码:
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class CopyAllFile { public static void main(String[] args) throws Exception { //1.创建源和目标 File srcDir = new File("D:/资料/test"); File destDir = new File("D:/资料/test_copy"); if(!destDir.exists()){ destDir.mkdirs(); } copy(srcDir,destDir); } public static void copy(File src,File dest) throws Exception{ if(src.isDirectory()){ //是目录,就在目标文件夹中创建与源文件夹相同名称的文件夹 File destDir = new File(dest,src.getName()); destDir.mkdir(); //列举出所有的文件对象 File[] fs = src.listFiles(); //遍历所有的文件对象 for (File file : fs) { copy(file,destDir); } }else{ File file1 =new File(dest,src.getName()); copyFile(src,file1); } } public static void copyFile(File inputFile,File outputFile) throws Exception{ BufferedInputStream in = new BufferedInputStream(new FileInputStream(inputFile)); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outputFile)); byte[] buffer = new byte[1024]; int len = -1; while((len = in.read(buffer)) != -1){ out.write(buffer, 0, len); } in.close(); out.close(); } }当然,也可以有这样的需求,比如,我只想复制.avi的视频文件,那么这时候就得有一个筛选器,java给我我们提供了:
File[] fs = dir.listFiles(FilenameFilter的实例) 必须覆盖类中的accept方法 boolean accept(File dir,String name){} File[] fs = srcDir.listFiles(new FilenameFilter(){ @Override public boolean accept(File dir, String name){ return new File(dir,name).isFile() && name.endsWith(".java"); } });