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

相关推荐

    RuoYi-Vue3(1).zip

    RuoYi-Vue3(1).zip

    multisim 仿真ADS8322仿真

    multisim 仿真ADS8322仿真

    guanyu.html

    guanyu

    《系统分析和设计》课程作业-面向中国各大城市的医院预约挂号系统.zip

    《系统分析和设计》课程作业——面向中国各大城市的医院预约挂号系统.zip

    初学Java时花费12天做的一款小游戏.zip

    冲刺 初学Java时花费12天做的一款小游戏.zip

    Access函数中文最新版本

    本文档详细的介绍了Access的一些函数;感兴趣的朋友可以过来看看

    [net毕业设计]ASP.NET教务管理平台-权限及公共模块设计与开发(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    基于Simulink的三相逆变器用于电机驱动系统.docx

    基于Simulink的三相逆变器用于电机驱动系统

    sons.vue

    sons

    [net毕业设计]asp.net考勤管理系统设计(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    Postgresql数据库常用命令中文最新版本

    psql 是一个以终端为基础的 PostgreSQL 前端。它允许你交互地键入查询,把它们发出给 PostgreSQL, 然后看看查询的结果。另外,输入可以来自一个文件。还有, 它提供了一些元命令和多种类 shell 地特性来实现书写脚本以及对大量任务的自动化。感兴趣的朋友可以过来看看

    DVD播放机:2023年全球DVD播放机行业收入达4.79亿美元,潜力无限

    DVD播放机行业:2023年全球DVD播放机行业收入高达4.79亿美元,潜力无限 在数字流媒体技术日新月异的今天,DVD播放机这一传统影音设备似乎已被时代遗忘。然而,事实并非如此。尽管流媒体服务如雨后春笋般涌现,但DVD播放机在全球市场依然保有庞大的存量规模,尤其在特定消费人群和特定需求领域中,其地位依然稳固。那么,在这个看似饱和的市场中,DVD播放机行业又将如何寻找新的增长点?专业咨询将成为您破局的关键。 市场概况: DVD播放机行业作为消费电子产业的重要组成部分,一直受到国家政策的鼓励和支持。近年来,随着《产业结构调整指导目录》、《超高清视频产业发展行动计划》等政策的出台,我国的制造创新与消费升级得到了有效推动,为DVD播放机行业的发展带来了广阔的市场空间。据统计,2023年度中国消费电子产品市场规模达到1.92万亿元,而全球DVD播放机行业收入也高达4.79亿美元。尽管数字流媒体的发展对传统DVD光盘影音播放造成了冲击,但在特定的市场环境及应用场景下,DVD光盘仍然拥有较大的消费基础。特别是便携式DVD播放机市场,在经过流媒体冲击后,近几年逐步趋于稳定,并在保有更大规模的存量市场

    消防气压给水设备和稳压泵安装 分项工程质量验收记录表.docx

    消防气压给水设备和稳压泵安装 分项工程质量验收记录表.docx

    ASP+ACCESS教师档案管理系统(源代码+论文)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    SD模块创建销售订单时,不检查物料的产品组

    此配置可实现不同产品组的物料使用同一个销售范围的订单类型

    MPU-6000/MPU-6050运动传感技术规格及应用解析

    内容概要:MPU-6000/6050 是一种集成了3轴陀螺仪和3轴加速度计的高性能集成运动处理单元 (MPU)。其采用 InvenSense 独特的 MotionFusion 技术,提供了强大的实时姿态识别和动作捕捉功能。文档详细描述了这两种产品的电气规格、设计参数和使用细节。特别是针对陀螺仪和加速度计的工作原理、分辨率、工作范围、功耗管理等技术要点做了详细介绍,并涵盖了 SPI 接口(仅 MPU-6000 支持)以及辅助 I²C 总线连接外部传感器的方法。同时,还提到了 ESD 处理和焊接规范等方面的内容,确保了在工业生产和应用中的稳定性和可靠性。 适用人群:电子工程师、硬件设计师及相关领域研究人员。 使用场景及目标:主要应用于智能手机、平板电脑、游戏控制器以及其他需要精准运动检测的设备。该产品旨在提升设备的动作感应精度,优化用户体验的同时降低成本。 其他说明:文档还包括详细的测试和认证流程,帮助用户更好地理解和评估该组件的实际性能,适合用于新产品的设计验证和技术调研。

    前端工程化实践课程下载

    视频课程下载——前端工程化实践

    全国月尺度相对湿度-Rhu-1961-2022-025x025

    全国月尺度相对湿度数据集(1961-2022, 0.25° × 0.25°)是一个高分辨率的网格化相对湿度数据集,覆盖了中国大陆及周边地区。 该数据集通过科学方法整合气象观测和再分析数据,为气候研究、生态模型、农业生产、以及水资源管理等领域提供了重要支持。 数据下载后可显示详细信息。

    SimSun.ttf 字体库下载simsun.ttf

    SimSun.ttf 字体库下载 simsun字体是系统中必备的字体,其实很多朋友不知道simsun字体就是宋体,如果系统中没有这个字体的话,那么很多文字排版啥的都不太好看了。下载本站提供的simsun字体即可解决~

    jingdian.html

    jingdian

Global site tag (gtag.js) - Google Analytics