`
michales003
  • 浏览: 397586 次
  • 性别: 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,
"

相关推荐

    Hibernate 中文 html 帮助文档

    使用Ant(Using Ant) 20.1.5. 对schema的增量更新(Incremental schema updates) 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 20.1.7. Schema 校验 20.1.8. 使用Ant进行schema校验 21....

    Hibernate中文详细学习文档

    使用Ant(Using Ant) 20.1.5. 对schema的增量更新(Incremental schema updates) 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 20.1.7. Schema 校验 20.1.8. 使用Ant进行schema校验...

    hibernate 体系结构与配置 参考文档(html)

    使用return-property来明确地指定字段/别名 16.3.2. 使用存储过程来查询 16.3.2.1. 使用存储过程的规则和限制 16.4. 定制SQL用来create,update和delete 16.5. 定制装载SQL 17. 过滤数据 17.1. Hibernate 过滤...

    Maven2 的新特性.7z

    在使用Maven2执行compile之后,这个目录中的所有文件及子目录,会复制到target/classes目录中,为以后的打包提供了方便。 • src/test/resources,负责管理项目测试的资源。在使用Maven2执行test-compile之后,这个...

    Hibernate参考文档

    使用Ant(Using Ant) 20.1.5. 对schema的增量更新(Incremental schema updates) 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 20.1.7. Schema 校验 20.1.8. 使用Ant进行schema校验 21....

    hibernate 框架详解

    使用return-property来明确地指定字段/别名 17.3.2. 使用存储过程来查询 17.3.2.1. 使用存储过程的规则和限制 17.4. 定制SQL用来create,update和delete 17.5. 定制装载SQL 18. 过滤数据 18.1. Hibernate ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    使用Ant(Using Ant) 20.1.5. 对schema的增量更新(Incremental schema updates) 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 20.1.7. Schema 校验 20.1.8. 使用Ant进行schema校验...

    Hibernate+中文文档

    使用Ant(Using Ant) 20.1.5. 对schema的增量更新(Incremental schema updates) 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 20.1.7. Schema 校验 20.1.8. 使用Ant进行schema校验...

    最全Hibernate 参考文档

    使用Ant(Using Ant) 20.1.5. 对schema的增量更新(Incremental schema updates) 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 21. 示例:父子关系(Parent Child Relationships) 21.1. ...

    HibernateAPI中文版.chm

    使用Ant(Using Ant) 20.1.5. 对schema的增量更新(Incremental schema updates) 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 20.1.7. Schema 校验 20.1.8. 使用Ant进行schema校验...

    hibernate3.2中文文档(chm格式)

    使用Ant(Using Ant) 20.1.5. 对schema的增量更新(Incremental schema updates) 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 20.1.7. Schema 校验 20.1.8. 使用Ant进行schema校验...

    hibernate3.04中文文档.chm

    21.1.4. 使用Ant(Using Ant) 21.1.5. 对schema的增量更新(Incremental schema updates) 21.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 22. 示例:父子关系(Parent Child ...

    Hibernate教程

    21.1.4. 使用Ant(Using Ant) 21.1.5. 对schema的增量更新(Incremental schema updates) 21.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 22. 示例:父子关系(Parent Child ...

    新版Android开发教程.rar

    o Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows o Not Not Not Not compatible with Gnu Compiler for Java (gcj) Note: Note: Note: Note: If JDK is already installed on your ...

    Hibernate3+中文参考文档

    使用Ant(Using Ant) 20.1.5. 对schema的增量更新(Incremental schema updates) 20.1.6. 用Ant来增量更新schema(Using Ant for incremental schema updates) 21. 示例:父子关系(Parent Child Relationships) 21.1. ...

    Java学习笔记-个人整理的

    {5.2.1}将浮点数四舍五入到指定精度}{98}{subsection.5.2.1} {6}Exception}{99}{chapter.6} {6.1}\ttfamily try-catch}{99}{section.6.1} {6.2}\ttfamily finally}{100}{section.6.2} {6.3}\ttfamily throws}{...

Global site tag (gtag.js) - Google Analytics