本帖最后由 suihs11 于 2015-3-14 13:08 编辑
基础视频中讲过递归删除文件夹,但没讲过复制,自己做的时候遇到了一些问题,但是总体思路是一样的----上代码:
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- /**
- * 复制文件夹练,并计算出复制的时间
- *
- * @author 隋
- */
- public class FileCopy {
- public static void main(String[] args) {
- // 创建源文件和目的地文件对象
- File srcFile = new File("D:\\KuGou");
- File destFile = new File("E:\\");
- // 记录开始时间
- long start = System.currentTimeMillis();
- // 调用复制文件夹方法
- copyDirectory(srcFile, destFile);
- // 记录结束时间
- long end = System.currentTimeMillis();
- /*
- * //这样写结果多了8小时,应该是时区的问题,不会弄
- *
- * //获取标准时间格式 String pattern = "HH小时mm分钟ss秒";
- * SimpleDateFormat sdf = new SimpleDateFormat(pattern);
- * String time = sdf.format(end-start);
- * System.out.println("复制" + srcFile.getAbsolutePath() + "---到---"
- * + destFile.getAbsolutePath() + "共耗时" + time);
- */
-
- // 把复制文件耗时打印在控制台上
- System.out.println("复制" + srcFile.getAbsolutePath() + "---到---"
- + destFile.getAbsolutePath() + "共耗时" + (end - start) + "毫秒" );
- }
- /**
- * 复制文件夹方法
- *
- * @param srcFile
- * 源文件对象
- * @param disFile
- * 目的地文件对象
- */
- public static void copyDirectory(File srcFile, File disFile) {
- // 定义目的地文件(夹)名字
- String destFileName = null;
- // 创建目的地文件夹
- File destFile = new File(disFile, srcFile.getName());
- if (!destFile.exists()) {
- destFile.mkdirs();
- }
- // 获取文件夹下面的文件和文件夹列表数组
- File[] files = srcFile.listFiles();
- // 遍历数组
- for (File file : files) {
- // 判断如果是文件夹,就到目的地文件夹下创建该文件夹,并递归
- if (file.isDirectory()) {
- destFileName = destFile.getAbsolutePath() + "\\" + file.getName();
- File directoryFile = new File(destFileName);
- directoryFile.mkdirs();
- copyDirectory(file, directoryFile);
- } else {
- // 如果是文件,先在目的地文件夹下创建该文件对象,并调用复制文件方法(copyFile)
- destFileName = destFile.getAbsolutePath() + "\\" + file.getName();
- File finalFile = new File(destFileName);
- try {
- finalFile.createNewFile();
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- copyFile(file, finalFile);
- }
- }
- }
- /**
- * 复制文件方法
- *
- * @param srcFile
- * 源文件文件对象
- * @param destFile
- * 目标文件对象
- */
- private static void copyFile(File srcFile, File destFile) {
- BufferedInputStream bis = null;
- BufferedOutputStream bos = null;
- try {
- bis = new BufferedInputStream(new FileInputStream(srcFile));
- bos = new BufferedOutputStream(new FileOutputStream(destFile));
- byte[] bys = new byte[1024];
- int len = 0;
- while ((len = bis.read(bys)) != -1) {
- bos.write(bys, 0, len);
- bos.flush();
- }
- } catch (IOException ioe) {
- ioe.printStackTrace();
- } finally {
- try {
- if (bis != null) {
- bis.close();
- }
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- try {
- if (bos != null) {
- bos.close();
- }
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- }
- }
- }
复制代码
|
|