黑马程序员技术交流社区
标题:
一个复制文件夹的代码
[打印本页]
作者:
吴光新
时间:
2013-8-1 20:13
标题:
一个复制文件夹的代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
class CopyPath{
public static void main(String[] args)throws IOException{
String copyPathStr = "F:\\test"; //要复制的文件夹
String savePathStr = "F:\\copy"; //要保存到哪里
System.out.println("正在复制...");
copyPath(copyPathStr,savePathStr);
System.out.println("复制成功");
}
/**
* 复制文件夹,本例没有包含该文件夹,只复制该文件夹下的所有文件及文件夹。
* @param copyPathStr 要复制的文件夹
* @param savePathStr 要复制到哪个文件夹下
*/
public static void copyPath(String copyPathStr,String savePathStr){
//首先用接收到的两个字符串创建成文件对象
File copyPath = new File(copyPathStr);
File savePath = new File(savePathStr);
//判断保存的目录是否存在
if (!(copyPath.exists())){
System.out.println("保存的目录不是有效目录!");
System.exit(0);
}
//判断在该目录下是否有相同的文件存在
if (savePath.exists()){
System.out.println("复制失败!文件夹重复");
System.exit(0);
}
//创建主目录
savePath.mkdirs();
//获取该目录下所有文件及文件夹的数组列表
File[] files = copyPath.listFiles();
File pathStr = null;
for(File file : files){
//建立保存的目录
pathStr = new File(savePathStr+(file.toString().replace(copyPathStr, "")));
//如果是目录,再次调用fileToList方法。并创建目录
if(file.isDirectory()){
copyPath(file.toString(),pathStr.toString());
pathStr.mkdirs();
}
//如果是文件,就调用复制文件的方法
if(file.isFile()){
copyFile(file,pathStr);
}
}
}
/**
* 复制文件
* @param file 要复制的文件绝对路径
* @param path 要保存到的目录
*/
public static void copyFile(File file,File path){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try{
//若以上判断都通过,就创建输入流和输出流。
bis = new BufferedInputStream(new FileInputStream(file));
bos = new BufferedOutputStream(new FileOutputStream(path));
//创建数组,指定大小为available方法获取的读取流中的字节数。
byte[] bytes = new byte[bis.available()];
//保存数据
bis.read(bytes);
bos.write(bytes);
}
catch(IOException e){
throw new RuntimeException("复制文件失败");
}
//关闭流资源
finally{
try{
if (bis!=null){
bis.close();
}
}
catch(IOException e){
throw new RuntimeException("输入流关闭失败");
}
try{
if (bos!=null){
bos.close();
}
}
catch(IOException e){
throw new RuntimeException("输出流关闭失败");
}
}
}
}
复制代码
思路:
1、主函数传递两个字符串到copyPath类,一个是要复制的文件夹,一个是要保存在哪个文件夹下
2、copyPath类接收后用这两个字符串分别创建成目录对象,并作一些判断。
3、判断通过后,就用要保存到的哪个目录创建一个主目录,用listFiles方法封装一个源目录下所有的文件名称的数组
4、用for遍历该数组,单独用一个文件类型的遍历pathStr记录把数组中的文件名的前缀替换成指定的前缀。
5、对数组中的元素进行判断,如果isDirectory(),再次调用本方法,形成递归,然后创建该目录,如果是文件,就调用复制文件copyFile方法
5、关闭资源
思路可能有点笨拙,希望大家给出自己最理想的方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2