package com.bjpowernode.javase.day27.IO; import java.io.*; public class CopyAll { public static void main(String[] args) { //拷贝源 File srcFile=new File("D:\\javaSE\\Test"); //拷贝目标 File desFile=new File("D:\\javaSE\\Test02"); //调用方法拷贝 copyDir(srcFile,desFile); } private static void copyDir(File srcFile,File desFile) { if(srcFile.isFile()){ /*如果srcFile是一个文件的话,递归结束*/ //是文件的时候需要拷贝 //....一边读一边写 FileInputStream in=null; FileOutputStream out=null; try { in=new FileInputStream(srcFile); out=new FileOutputStream( (desFile.getAbsolutePath().endsWith("\\")? desFile.getAbsolutePath():desFile.getAbsolutePath()+"\\")+srcFile.getAbsolutePath().substring(10)); //一边读一边写 byte[] bytes=new byte[2];//一次复制2字节 int readCount=0; while ((readCount=in.read(bytes))!=-1) { out.write(bytes,0,readCount); } out.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (in!=null){ try { in.close(); }catch (IOException e){ e.printStackTrace(); } } if(out!=null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } return; } //获取源下面的子目录 File[] files=srcFile.listFiles(); for(File file:files){ //获取所有文件的(包括目录和文件)的绝对路径 /*System.out.println(file.getAbsolutePath());*/ if(file.isDirectory()){ //新建对应的目录 /*System.out.println(file.getAbsolutePath());*/ /*D:\javaSE\Test*/ //源目录 /*D:\javaSE\Test02*/ //目标目录 String strDir=file.getAbsolutePath(); /*System.out.println(strDir.substring(10));*/ String desDir= (desFile.getAbsolutePath().endsWith("\\")? desFile.getAbsolutePath():desFile.getAbsolutePath()+"\\")+strDir.substring(10); System.out.println(desDir); File newFile=new File(desDir); if(!newFile.exists()){ newFile.mkdirs();//如果计划目录不存在,我们就需要创建 } } //递归调用 copyDir(file,desFile); } } }
涉及到字符串的拼接,递归的使用
字符串拼接的时候要注意java会将“\\”看做“\”,那么一个“/”就会被看成转义字符,导致路径字符串拼接失败,这个时候应该使用三目运算符给它加上一个斜杠。