在Java中IO流复制单个文件比较容易,如果需要复制带内容的文件
就需要一些判断的方法,下面是代码实现.
public class 题目三IO {
/**
* 实现多级目录复制
*/
public static void main(String[] args) throws IOException {
copy("f:\\aa","f:\\bb");
}
public static void copy(String src,String des) throws IOException {
//创建两个路径的文件对象
File file1 = new File(src);
File file2 = new File(des);
File[] files = file1.listFiles();
//判断要输出的文件夹是否存在,没有就创建
if (!file2.exists()){
file2.mkdirs();
}
//遍历
for (File thisFile : files) {
//如果是目录就继续递归调用本方法
if (thisFile.isDirectory()){
//创建对应目录下的文件夹
/*最核心的就是输出路径的写法,递归调用的时候会把上个文件的地址继续传入,
从而达到了多级目录复制.
*/
copy(thisFile.getPath(),des+"\\"+thisFile.getName());
}else if (thisFile.isFile()){
//是文件,直接复制过去
copyFile(thisFile.getPath(),des+"\\"+thisFile.getName());
}
}
}
public static void copyFile(String src,String des) throws IOException {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(des));
int len;
byte[] buf= new byte[1024*8];
while ((len=in.read(buf))!=-1){
out.write(buf,0,len);
}
out.close();
in.close();
}
}