黑马程序员技术交流社区
标题:
分享一个拷贝目录的小程序!
[打印本页]
作者:
金肖
时间:
2012-5-22 06:29
标题:
分享一个拷贝目录的小程序!
本帖最后由 金肖 于 2012-5-22 06:42 编辑
/**
* <A ><A >拷贝一个带内容的文件夹</A></A>。 例如:将D:\\itcast\\java文件夹拷贝到d盘根目录。
* 思路:
* 1)定义拷贝文件的函数,接收两个文件参数(源和目标)
* 2)对源目录进行判断,不存在,抛异常,如果存在,先判断是否是文件,如果是则调用复制文件的功能
*
* 3)如果是是目录,调用 File.listFiles()方法将文件存储进数组
* 4)遍历数组,判断文件,如果是目录,获取该文件名,在目的处创建一个,并在次掉用copyDir()的功能
* 5)如果是文件,调用copyFile()的功能对文件进行复制
*
* 代码实现如下
* * @author jinxiao
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class CopyFile {
private static final int BUFFER_SIZE = 2048 * 1024;
public static void main(String[] args) throws IOException {
File fromPath = new File("c:\\program files\\java");
File toPath = new File("D:\\");
copyDir(fromPath, toPath);
}
/**
* 定义功能,对目录进行拷贝
* @param fromPath
* @param toPath
* @throws IOException
*/
private static void copyDir(File fromPath, File toPath) throws IOException {
//对给定的目录进行判断,不存在,则抛出异常
if (!fromPath.exists()) {
throw new RuntimeException("目录不存,请重新输入!");
}
else if (fromPath.isFile()) {
copyFiles(fromPath, toPath);
} else {
File[] files = fromPath.listFiles(); //将目录中的文件存储进数组
for (File file : files) { //对数组进行遍历
//对文件进行判断,如果是文件,则继续调用copyDir方法,递归
if (file.isDirectory()) {
//获取文件的的绝对路径,和文件名,并封装
File dir = new File((toPath.getAbsolutePath() + "\\" + fromPath.getName()));
System.out.println(dir.getAbsolutePath());
//在目的地创建文件夹
dir.mkdirs();
// 对目录进行递归,深度遍历
copyDir(file, dir);
}
else {
// 调用复制文件的功能
copyFiles(file, toPath);
}
}
}
}
/**
* 定义复制文件的功能
* @param sFile
* @param pFile
* @throws IOException
*/
private static void copyFiles(File sFile, File pFile) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
File fromFile = sFile.getAbsoluteFile();
// 创建集合,对文件的父目录进行切割,并存储进集合
List<String> list = Arrays.asList(sFile.getParent().split("\\\\"));
// 获取文件的直接父目录的字符串
String str = list.get(list.size() - 1);
// 获取目标的绝对路径,和文件的父目录,并在目的地创建文件夹
new File(pFile.getAbsoluteFile() + "\\" + str).mkdirs();
// 获取文件上传的目的地
String newfileName = pFile.toString() + "\\" + str;
// 获取文件名
String fileName = fromFile.getName();
// 创建流关联文件,并写入目的地
fis = new FileInputStream(fromFile);
fos = new FileOutputStream(newfileName + "\\" + fileName);
byte[] buf = new byte[BUFFER_SIZE];
int len = 0;
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
//关流
fis.close();
fos.close();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2