`
michales003
  • 浏览: 403226 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

使用ant 自定义复制指定文件

    博客分类:
  • J2EE
阅读更多

//CopyFile.java类文件

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;


/**
 * @author heyigang
 *
 */
public class CopyFile extends Task{
 
 private File src;
 private File toDir;
 private File filter;
 
 private List srcDirs = new ArrayList(); //存放源目录的路径
 private List distDirs = new ArrayList(); //存放目的目录的路径
 
 //默认的文件过滤路径
 private String DEFAULT_FILTER_PATH = "filter.ini";
 
 /*
  * 构造方法
  * */
 public CopyFile() {
 }
 
 /*
  * 加载默认的过滤拷贝的文件路径
  * */
 public void loadFilter() {
  loadFilter(new File(DEFAULT_FILTER_PATH));
 }
 
 /*
  * 加载配置文件中的过滤拷贝的文件路径
  * */
 public void loadFilter(File fiter) {
  try {
   BufferedReader reader = new BufferedReader(new FileReader(filter));
   String line = null;
   while(null!=(line=reader.readLine())) {
    //拼接路径
    String srcPath = new StringBuffer(src.getPath())
        .append(line.trim()).toString();
    String distPath = new StringBuffer(toDir.getPath())
        .append(line.trim()).toString();
    //判断是否位正确的路径或目录
    File tempsrcDir= new File(srcPath);
    if(!tempsrcDir.isDirectory() || !tempsrcDir.exists()) {
     System.out.println(srcPath + " 不是目录或者目录不存在!");
     System.exit(1);
    }
    
    //将正确的目录添加到list中
    srcDirs.add(srcPath);
    distDirs.add(distPath);
   }
   reader.close();
  }catch(Exception ex) {
   ex.printStackTrace();
  }
 }
 
 /*
  * 从一个文件目录到另外一个文件目录
  * */
 public void copyDir(File srcDir,File distDir) {
  try {
   //创建目标文件目录
   if(!distDir.exists()) {
    distDir.mkdirs();
   }
   File[] files = srcDir.listFiles();
   for (int i = 0; i < files.length; i++) {
    File tempFile = files[i];
    if(!tempFile.getName().equals(".svn")) {     
     if(!tempFile.isDirectory()) {
      //是文件开始复制...
      copyFile(tempFile,new File(getDistPath(tempFile)));
     } else {
      //是路径继续调用本身
      copyDir(tempFile,new File(getDistPath(tempFile)));
     } 
    }
   }
  }catch(Exception ex) {
   ex.printStackTrace();
  }
 }
 
 /*
  * 根据源文件获得目标文件目录的路径或者全文件名称
  * */
 public String getDistPath(File srcFile) {
  return new StringBuffer(srcFile.getAbsolutePath())
   .replace(0, src.getPath().length(), toDir.getPath()).toString();
 }
 
 /*
  * 从一个文件复制该文件到另外一个目录下面
  * */
 public void copyFile(File srcFile,File distFile) {
  try {
   if(!distFile.exists()) {
    srcFile.createNewFile();
   }
   BufferedInputStream in = new BufferedInputStream(new FileInputStream(srcFile));
   BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(distFile));
   byte[] buffer = new byte[1024];
   int len = -1;
   while(-1!=(len=in.read(buffer))) {
    out.write(buffer, 0, len);
    
   }
   out.close();
   in.close();
  }catch(Exception ex) {
   ex.printStackTrace();
  }
 }
 
 /*
  * Task的可执行方法...
  * */
 public void execute() throws BuildException {
  try {
   loadFilter();
   System.out.println("开始复制文件,请稍候...");
   System.out.println("从目录:" + src.getAbsolutePath());
   System.out.println("到目录:" + toDir.getAbsolutePath());
   long start = System.currentTimeMillis();
   for (int i = 0; i < srcDirs.size(); i++) {
    copyDir(new File((String)srcDirs.get(i)), new File((String)distDirs.get(i)));
   }
   double time = (double)(System.currentTimeMillis() - start) / 1000;
   System.out.println("复制文件完成!总共用时" + time + "秒.");
  }catch(Exception ex) {
   ex.printStackTrace();
  }
 }
 
 public File getFilter() {
  return filter;
 }
 public void setFilter(File filter) {
  this.filter = filter;
 }
 public File getSrc() {
  return src;
 }
 public void setSrc(File src) {
  this.src = src;
 }
 public File getToDir() {
  return toDir;
 }
 public void setToDir(File toDir) {
  this.toDir = toDir;
 }

}

 

//build.xml 配置文件如下

<?xml version="1.0" encoding="GB2312"?>
<project name="CopyFiles" default="copyfiles"> 
    <target name="help"> 
        <echo message="Available targets are:"/>
        <echo message="copefiles    --> copy files from src to dist"/> 
        <echo message="-----------------------------------"/>
        <echo message="ant.home     --> ${ant.home}"/>
        <echo message="ant.version  --> ${ant.version}"/> 
        <echo message=""/>
    </target>
 
    <taskdef name="copefiles" classname="CopyFile" classpath="."></taskdef>
 
 <target name="copyfiles" depends="help">
   <!--
     从源目录src复制filter.ini中文件夹下的目录到制定的todir文件目录下
     配置文件需要
   //-->
  <copefiles src="D:/EIP/trunk/Src/Service/erp" todir="D:/Source_V1.2" filter="Source_V1.2.txt"/>
  <copefiles src="D:/EIP/trunk/Src/Service/erp" todir="D:/Source_V2.1" filter="Source_V2.1.txt"/>
 </target>
</project>

 

//Source_V1.2.txt 制定需要配置的文件路径

/ot/com/SC_OT_QueryResponsibility
/ot/com/SC_OT_RequestReturnStatusSrv
/ot/com/SC_OT_VerifyAPInvoiceCurrencySvr
/ot/com/SC_OT_VerifyCurrencySvr
/ot/com/SC_OT_COM_VerifyAPInvoiceCurrencySvr

 

//command.bat 可执行文件

set classpath=%classpath%;%ANT_HOME%\lib\ant.jar;
call javac CopyFile.java
call ant 
cd D:\JAVA\apache-ant-1.7.0\hyg
cmd

 

//所有的配置做好之后,运行command.bat就可以开始进行复制了。

//项目开发过程好过程中,在部署包的时候取包不方便,便有了这个需求,发了10分钟写了CopyFile.java这个核心类。感觉还挺好用。

 

分享到:
评论
2 楼 michales003 2008-09-10  
1楼说得是啊.主要是我用ant少,没有找到这样可以过滤...现在已经使用你的方法,发现也可以实现,简单多了.谢谢指点.不过自己做了一下,还是学了点东西的.
1 楼 moogle 2008-09-08  
我觉得太麻烦了。 这个功能完全不必要用你再单写来实现,本身ANT已经包含这种功能了。
比如在使用ant的copys时,可以增加属性
<fileset dir="${web.dir}" includes="@{patchFileList}" />
includes="
WEB-INF/classes/cn/edu/tsinghua/dictionary/**,
xx.jsp,
"

相关推荐

    ant配置文件

    例如,元素定义了整个构建的根,元素表示一个具体的构建任务,用于指定类路径,用于编译Java源代码,用于复制文件,用于创建JAR文件等。每个元素都有其特定的属性,如source、target用于设置Javac的编译级别,...

    Ant自定义任务

    本文将深入探讨“Ant自定义任务”的概念、实现方式以及实际应用。 Ant是基于XML的构建工具,其主要任务定义在名为`build.xml`的文件中。默认情况下,Ant提供了一系列内置的任务,如编译Java源代码、打包JAR文件、...

    ant的build文件说明

    在给定的标题“ant的build文件说明”中,我们关注的是如何理解和使用Ant的build文件。 `build.xml`是Ant的构建配置文件,它是整个构建过程的蓝图。文件中包含了各种元素,如`project`、`target`、`task`等,这些...

    ant 使用指南-ant入门

    - 文件集是Ant处理文件和目录的一种方式,可以指定一组文件,然后在多个任务中重用。 5. **宏定义(Macrodefs)** - 宏定义允许创建自定义的任务,方便复用和抽象复杂的构建逻辑。 6. **依赖关系(Dependencies...

    Ant 配置文件详解

    Ant 使用`classpath`或`classpathref`来指定运行时所需的类库。可以是绝对路径,也可以是相对路径或者文件集。例如: ```xml **/*.jar"/&gt; ``` 上面定义了一个类路径,包含了`library.jar`和`lib`目录下的...

    ant安装文件+使用模板

    - `&lt;task&gt;`标签用于调用Ant内置或者自定义的任务,如`&lt;javac&gt;`用于编译Java源码,`&lt;copy&gt;`用于复制文件。 3. **执行Ant** - 在命令行中,进入包含`build.xml`的目录,然后输入`ant [target]`命令,不指定target则...

    使用Flex Ant Tasks编译工程文件

    5. **copy** 和 **move**:这些任务用于在构建过程中移动文件,例如复制库到指定目录,或者在编译后将SWF文件移动到Web服务器的发布目录。 在实际使用中,你还需要确保正确安装并配置了Adobe Flex SDK和Ant。通常,...

    ant工具使用指南ant工具使用指南

    4. copy:复制文件或目录,可以使用todeldir属性指定目标位置。 5. mkdir:创建目录,dir属性指定了要创建的目录路径。 五、条件语句与循环 1. if/else:根据条件决定是否执行某个任务。 2. foreach:遍历集合,...

    ANT-build-xml文件详解

    ANT-build.xml文件是Apache Ant构建工具的核心配置文件,它使用XML格式定义了构建项目的所有步骤和任务。Ant是Java社区广泛使用的自动化构建工具,它的主要优势在于跨平台性、易用性和灵活性。 1. **Ant与Makefile...

    Ant使用指南.rar

    - Ant的任务是构建过程中的基本操作单元,例如javac任务用于编译Java源代码,copy任务用于复制文件,jar任务用于创建JAR文件等。 - 任务可以通过属性来定制,例如javac任务中的srcdir指定源代码目录,destdir指定...

    ant build.xml 使用实例

    4. **自定义构建目标**:`build.xml`可以定义多个目标,通过在命令行指定目标名来选择执行哪个目标,如`ant compile`或`ant package`。每个目标可以依赖其他目标,形成构建链。 5. **属性与属性文件**:Ant支持使用...

    Ant构建文件

    6. **脚本支持**:Ant允许在构建文件中嵌入Ant任务之外的自定义脚本,如Java、Perl或Python,以执行更复杂的任务。 压缩包中的“build2.xml”和“build1.xml”是Ant的构建文件。这些文件定义了构建项目的步骤、目标...

    ant.rar亲测可以使用

    3. **任务驱动**:Ant提供了丰富的内置任务,如`javac`用于编译Java源代码,`jar`用于打包JAR文件,`copy`用于文件复制等。同时,用户还可以自定义任务以满足特殊需求。 4. **依赖管理**:Ant可以处理项目间的依赖...

    Ant基本使用指南(入门教程)

    使用`-buildfile`选项可以指定不同的构建文件,`-find`选项则会让Ant在父目录中搜索构建文件。执行特定的目标可以使用目标名称,如`ant compile`来只执行名为`compile`的目标。如果未指定目标,Ant会执行默认目标。 ...

    ant使用手册ANT使用指南

    Ant提供了丰富的任务来处理文件系统操作,如复制文件、创建目录等。 ```xml ${build.dir}"&gt; ${src.dir}"&gt; **/*.java"/&gt; ``` ##### 6.2 模式匹配 Ant支持模式匹配来过滤文件和目录。 ```xml ${src.dir}"&gt; *...

    ant工具ant资源包

    5. **文件集(Filesets)**:文件集是Ant处理文件的一种方式,它可以指定一组满足特定条件的文件,如所有.java文件或者特定目录下的所有文件。 6. **依赖关系(Dependencies)**:Ant会根据目标之间的依赖关系来...

    Ant 1.9.1 学习笔记

    每个任务由`&lt;name&gt;`元素定义,它对应一个具体的Ant任务,如编译Java源文件、复制文件等。 ### Ant的任务 Ant的任务分为三类:核心任务、可选任务和用户自定义任务。核心任务是Ant自带的,可选任务需要额外的JAR文件...

    ant工具和ant教程

    此外,Ant支持使用文件集(fileset)来指定一组文件,这对于处理大量文件非常有用。例如,你可以创建一个文件集来包含所有的Java源代码,然后用它来执行编译任务。 标签"java"表明Ant主要与Java开发相关,但Ant也...

Global site tag (gtag.js) - Google Analytics