本帖最后由 金肖 于 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();
- }
- }
复制代码 |
|