import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
//复制一个带内容的文件夹
/*
* 我是思路是:先用递归的方法 获取文件夹中所有文件的路径名 存入集合中 然后再遍历集合的时候用流写入指定目录
*
*
* 这个方法我觉得好笨 有没有好一点的办法
*/
public class CopyDir {
public static void main(String args[]) throws IOException{
Copy c=new Copy();
c.copy("D:\\书\\吉他\\一百首高清初级弹唱谱,最简和弦", "D:\\abc");
}
}
class Copy{
public void copy(String dirName,String destPath) throws IOException{
File dir = new File(dirName);
File dest= new File(destPath);
if(!dest.exists())
{
System.out.print("目标路径不存在");
return;
}
if(!dir.exists()||(!dir.isDirectory())){
System.out.println("文件夹不存在或者不合法");
return;
}
List<String> list = new ArrayList<String>();
listFile(dir,list);
String pathName = dir.getName();
String s1 = dirName.substring(dirName.lastIndexOf("\\")+1);
// System.out.println(s1);
for(String s:list){
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(s));
String fileName=s.substring(s.lastIndexOf("\\")+1);
String s2 = s.substring(dirName.length());
String s3 = s2.substring(0,s2.lastIndexOf("\\"));
String s4=destPath+"\\"+s1+s3;
File destDir = new File(s4);
if(!destDir.exists()){
destDir.mkdirs();
}
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(s4+"\\"+fileName));
int len = 0;
while((len=bis.read())!=-1){
bos.write(len);
}
bis.close();
bos.close();
}
}
public void listFile(File dir,List<String> list){
File[] files=dir.listFiles();
for(File f:files){
if(f.isDirectory()){
listFile(f,list);
}else{
list.add(f.getAbsolutePath());
}
}
}
}
|