复制文件夹
字节流
BufferedInputStream,BufferedOutputStream
FileInputStream,FileOutputStream
问题分解
(1) 复制一个文件 copyFile()
(2) 指定目录下的所有文件 copyDir()
(3) 指定目录下的所有文件及子目录下的所有文件 ---递归调用copyDir
1 import java.io.BufferedInputStream; 2 import java.io.BufferedOutputStream; 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 9 public class TestCopy { 10 public static void main(String[] args) { 11 12 File srcDir=new File("D:\PanDownload"); 13 File targetDir=new File("F:\PanDownload"); 14 //调用复制指定目录下所有文件的方法 15 copyDir(srcDir, targetDir); 16 } 17 public static void copyDir(File srcDir,File targetDir){ 18 if(!targetDir.exists()){ 19 targetDir.mkdir();//如果目的地的目录不存在,则需要使用File类的方法进行创建目录 20 } 21 File []files=srcDir.listFiles(); //获取指定目录下的所有File对象 22 for (File file : files) { 23 if (file.isFile()) { 24 //如果file是文件则复制 srcDir -->D:\PanDownload 拼接 D:\PanDownload\XXXX文件 25 // targetDir-->E:\PanDownload 拼接 E:\PanDownload\XXXX文件 26 copyFile(new File(srcDir+"\"+file.getName()), new File(targetDir+"\"+file.getName())); 27 }else{ 28 //不是继续调用该方法判断,使用递归实现 29 copyDir(new File(srcDir+"\"+file.getName()), new File(targetDir+"\"+file.getName())); 30 } 31 } 32 } 33 public static void copyFile(File srcFile,File targetFile){ 34 //(1)提高读取效率,从数据源 35 BufferedInputStream bis=null; 36 //(2)提高写入效率,写到目的地 37 BufferedOutputStream bos=null; 38 try { 39 bis = new BufferedInputStream(new FileInputStream(srcFile)); 40 41 bos = new BufferedOutputStream(new FileOutputStream(targetFile)); 42 //(3)边读边写 43 byte [] buf=new byte[1024];//中转站 44 int len=0;//用于存储读到的字节的个数 45 while((len=bis.read(buf))!=-1){ 46 bos.write(buf,0,len); 47 } 48 } catch (FileNotFoundException e) { 49 // TODO Auto-generated catch block 50 e.printStackTrace(); 51 } catch (IOException e) { 52 // TODO Auto-generated catch block 53 e.printStackTrace(); 54 }finally{ 55 //(4)关闭 56 if(bos!=null){ 57 try { 58 bos.close(); 59 } catch (IOException e) { 60 // TODO Auto-generated catch block 61 e.printStackTrace(); 62 } 63 } 64 if(bis!=null){ 65 try { 66 bis.close(); 67 } catch (IOException e) { 68 // TODO Auto-generated catch block 69 e.printStackTrace(); 70 } 71 } 72 73 } 74 } 75 }