Java中实现复制文件或文件夹——CopyUtil.java

转载 2012年03月21日 12:20:49

参考自:http://blog.csdn.net/Dream_JavaWorld/article/details/3682075

拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等。

但是在复制文件夹时,则需要利用Flie类在目标文件夹中创建相应的目录,并且使用递归方法。

[java] view plaincopy
  1. package org.bruce.convert.util;  
  2.   
  3. import java.io.*;  
  4.   
  5. /** 
  6.  * 复制文件夹或文件夹 
  7.  */  
  8. public class CopyUtil {  
  9.     public static boolean _choice = true;  
  10.       
  11.     // 复制文件  
  12.     public static void CopyFile(File sourceFile, File targetFile)  
  13.             throws IOException {  
  14.         // 新建文件输入流并对它进行缓冲  
  15.         FileInputStream input = new FileInputStream(sourceFile);  
  16.         BufferedInputStream inBuff = new BufferedInputStream(input);  
  17.   
  18.         // 新建文件输出流并对它进行缓冲  
  19.         FileOutputStream output = new FileOutputStream(targetFile);  
  20.         BufferedOutputStream outBuff = new BufferedOutputStream(output);  
  21.   
  22.         // 缓冲数组  
  23.         byte[] b = new byte[1024 * 5];  
  24.         int len;  
  25.         while ((len = inBuff.read(b)) != -1) {  
  26.             outBuff.write(b, 0, len);  
  27.         }  
  28.         // 刷新此缓冲的输出流  
  29.         outBuff.flush();  
  30.   
  31.         // 关闭流  
  32.         inBuff.close();  
  33.         outBuff.close();  
  34.         output.close();  
  35.         input.close();  
  36.     }  
  37.   
  38.     // 复制文件夹  
  39.     public static void CopyDirectory(String sourceDir, String targetDir)  
  40.             throws IOException {  
  41.         // 新建目标目录  
  42.         (new File(targetDir)).mkdirs();  
  43.         // 获取源文件夹当前下的文件或目录  
  44.         File[] file = (new File(sourceDir)).listFiles();  
  45.         for (int i = 0; i < file.length; i++) {  
  46.             if (file[i].isFile()) {  
  47.                 // 源文件  
  48.                 File sourceFile = file[i];  
  49.                 // 目标文件  
  50.                 File targetFile = new File(  
  51.                         new File(targetDir).getAbsolutePath() + File.separator  
  52.                                 + file[i].getName());  
  53.                 CopyFile(sourceFile, targetFile);  
  54.             }  
  55.             if (file[i].isDirectory()) {  
  56.                 // 准备复制的源文件夹  
  57.                 String dir1 = sourceDir + File.separator + file[i].getName();  
  58.                 // 准备复制的目标文件夹  
  59.                 String dir2 = targetDir + File.separator + file[i].getName();  
  60.                 CopyDirectory(dir1, dir2);  
  61.             }  
  62.         }  
  63.     }  
  64.       
  65.     /** 
  66.      * 稍作包装, 
  67.      * 如果 url1 是文件的话,直接copyFile 
  68.      * 如果 url1 是文件夹的话,再 copyDirectory 
  69.      * @throws IOException  
  70.      */  
  71.      public static boolean PowerCopy(String source, String dest) {  
  72.          try {  
  73.             File input = new File(source);  
  74.              if(input.isFile() && !_choice) {  
  75.                  // 如果输入是一个文件~  
  76.                  (new File(dest)).mkdirs();  
  77.                  File output = new File(dest+File.separator+input.getName());  
  78.                  CopyFile(input, output);  
  79.              } else if(input.isFile() && _choice) {  
  80.                  CopyFile(new File(source), new File(dest));  
  81.              } else {  
  82.                  // 如果输入是一个文件夹~  
  83.                  CopyDirectory(source, dest);  
  84.              }  
  85.              return true;  
  86.         } catch (IOException e) {  
  87.             // TODO Auto-generated catch block  
  88.             e.printStackTrace();  
  89.             BY.Err("exception occured in CopyUtil.powerCopy!");  
  90.             return false;  
  91.         }  
  92.      }  
  93.       
  94.     /** 
  95.      * usage!! 
  96.      */  
  97.     public static void main(String args[]) throws IOException {  
  98.         // 单文件~  
  99.         String url1 = "/Users/user/Desktop/480*320.png";  
  100.         String url2 = "/Users/user/Desktop/481*320.png";  
  101.           
  102.         // 源文件夹 -> 目标文件夹  
  103. //      String url1 = "/Users/user/Desktop/Resources";  
  104. //      String url2 = "/Users/user/Desktop/Resources2";  
  105.         PowerCopy(url1, url2);  
  106.     }  
  107. }  



相关文章推荐

Java笔记之io——递归创建与删除多层文件夹,字符流实现文件复制

学了io流这一节后想到了一个问题,就是如何实现用递归实现逐级创建多层文件夹。当然,也可以创建文件,ps本文没有创文件 创建:主要是用递归调用,每次调用的时候利用file.getAbsolutePath...

java基础—IO流——复制一个文件到当前文件夹中

复制一个文件到当前文件夹中 import java.io.FileNotFoundException; import java.io.FileReader; import java.io.File...

今天看到了一个用java实现复制,剪切,删除文件或文件夹的示例,感觉不错,欢迎学习(带详细注释)

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java...

java递归实现复制一个文件夹下所有文件的功能

今天开始学习java的IO,学了一个复制文件的例子程序后想自己实现以下如何复制一个文件夹,复制文件的例子程序如下:package io.github.liuzhan214; import java.i...

Java中实现复制文件或文件夹

在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java专业知识,广州疯狂java培训为你讲解;   拷贝一个文件的算法比较简...

使用JAVA实现比较两个文件夹下的文件新增和修改情况,并复制到新的目录(实现增量更新项目)

- 0x00 前言 之前工作的时候,经常会有客户提交BUG或者新增一个功能等需求。于是我就会在我本地修改代码,然后再打包替换客户的项目。比较麻烦的是,每次更新都需要去SVN看看都改了哪些文...
  • zer0_o
  • zer0_o
  • 2015年07月11日 15:26
  • 2579

一道Java面试题之实现复制、删除、剪切文件(文件夹的实现)的snippet

因为前几天看到一道Java面试题是叫写出文件复制、删除和剪切的,所以昨天晚上就花了大概一个小时写出这个完整的snippet(当然如果只要思路的话就好办了)。 这个snippet中的删除文件(文件夹)部...

java实现文件夹的复制和文件的复制

//复制到特定目录下 public void copyFiles(File rootFile,File copyFile){ //如果目标目录是一个文件,则抛出不可复制到文件的...
  • GFJ0814
  • GFJ0814
  • 2016年07月08日 21:01
  • 288

java文件夹及文件复制

  • 2015年12月20日 22:04
  • 6KB
  • 下载

java.io.File类基本使用——遍历某路径的所有文件夹及文件

java.io.File类可以用来表示文件或目录,在需要遍历指定路径下的所有文件夹及文件时,可以使用此类。思路如下:1、判断给定路径是目录还是文件。 2、如果是文件,则直接打印该文件路径及文件名 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中实现复制文件或文件夹——CopyUtil.java
举报原因:
原因补充:

(最多只允许输入30个字)