4.5 Copy Task:对文件和目录进行复制Copy 任务把一个或多个文件复制到指定的目录下。但要注意的是,如果目标目录下具有同名的文件,那么只有当源文件相对于目标文件更新时,Ant工具才会复制这个文件。在Copy任务中可以使用FileSet类型来定义文件集合。 4.5.1 Copy Task的属性及功能Copy 任务具有以下属性: (1)file:用于指定要复制的源文件。 (2)preservelastmodified:作用是使得复制后的文件与源文件的最后修改时间相同。默认为false。 (3)tofile:用于指定要复制到的文件。 (4)todir:用于指定要复制到的目标目录。todir和tofile只能使用其中一个属性。 (5)overwrite:用于指定是否需要覆盖目录和文件,不管文件是否比源文件新,都会覆盖。默认为false。 (6)filtering:用于指定在复制时是否使用构件文件的全局过滤器对文件进行过滤。默认为false。 (7)flatten:用于指定是否需要复制目录,如果为true代表把所有的文件复制到todir属性设定的目录下。默认为false,复制目录。 (8)includeEmptyDirs:用于指定是否复制空目录。默认为true。 (9)failonerror:用于指定当遇到错误时是否停止执行。默认为true。 (10)verbose:用于指定当复制文件时是否记录日志信息。 (11)encoding:用于设定复制文件时的编码或文件过滤器使用的编码方式。默认时使用Java虚拟机的编码方式。 (12)outputencoding:指定写文件时的编码方式。默认时使用Java虚拟机的编码方式。 (13)enablemultiplemappings:用于设定是否允许多个映射。默认为false。 (14)granularity:用于指定一个文件修改时间的毫秒数据的允许误差。因为不是所有的文件系统的修改时间都是精确到毫秒数。默认时为0,如果为DOS系统则为2。 4.5.2 通过Copy Task实现文件和目录复制功能实例不管是对程序进行打包还是一般的文件操作,基本上都离不开复制功能。通过Ant工具的Copy任务可以让程序在Windows和Linux/UNIX下对文件和目录进行复制操作。例如: (1)对单个文件进行复制: <copy file="myfile.txt" tofile="mycopy.txt"/> 这个例子的作用是在当前目录复制myfile.txt,并把复制的文件命名为mycopy.txt。当需要把文件复制到别外的目录时可以这样编写: <copy file="myfile.txt" todir="../some/other/dir"/> 这个例子的作用是把文件复制到与当前目录同级的some目录的/other/dir子目录下。这里“..”代表相对路径(当前目录的上一级目录)。 (2)对文件目录进行复制: <copy todir="../new/dir"> <fileset dir="src_dir"/> </copy> 这个例子的作用是把src_dir目录复制到../new/dir目录下。有时对文件进行复制时需要对文件进行备份。下面举一个复制文件时对文件进行备份的例子。 <copy todir="../backup/dir"> <fileset dir="src_dir"> <exclude name="**/*.java"/> </fileset> <globmapper from="*" to="*.bak"/> </copy> 这个例子的作用是把src_dir目录及其子目录下所有非Java文件复制到../backup/dir目录下,并重命名为bak文件,以作备份。 4.5.3 在执行Copy Task时使用文件过滤的实例下面是一个复制文件的同时替换文件中的特殊符号的例子: <copy todir="../backup/dir"> <fileset dir="src_dir"/> <filterset> <filter token="TITLE" value="Foo Bar"/> </filterset> </copy> 这个例子的作用是把src_dir目录下的所有文件复制到../backup/dir目录,并在所有文件中查找并替换@TITLE@为Foo Bar。当要进行新产品发布时通过需要替换文件中的版本信息和时间信息。 说明:在Ant工具中还提供了copydir和copyfile这两个特定的任务,分别用于对目录和文件进行复制。但自从有了Copy任务后,这两个任务已过期,不建议再使用,应该统一使用Copy任务。 4.6 Delete Task:对文件和目录进行删除Delete 任务可用于删除一个或多个文件,或删除一个或多个目录和目录下的文件。默认时不会删除空目录,要删除空目录可以设定includeEmptyDirs属性为true。在Delete任务中可以使用FileSet和DirSet类型。 4.6.1 Delete Task的属性及功能Delete任务包括以下属性: (1)file:用于指定要删除的文件的名称,可以为相对路径或绝对路径。 (2)dir:指定一个将要被删除的根目录。这个目录下的子目录及文件将可能被删除。dir属性和file属性两者必须指定其一。 (3)verbose:作用是指定是否在命令行中输出被删除的文件的名称。默认为false。 (4)quiet:作用是指定当要被删除的文件或目录不存在时是否不显示提示信息。默认为false,代表要显示提示信息。 (5)failonerror:用于指定当出现错误时是否停止执行命令。 (6)includeemptydirs:表明当使用FileSet类型时是否删除空的目录。 (7)includes:用于指定将要删除的文件或目录的模式。可用逗号或空格符进行分隔。 (8)includesfile:用于指定要删除的文件的模式。已不建议使用。 (9)excludes:用于指定一个或多个文件模式或目录模式。这些符合条件的文件和目录将不被删除。 (10)excludesfile:用于指定将不被删除的文件模式,已不建议使用。 (11)defaultexcludes:用于指定是否使用Ant默认的default excludes模式,已不建议使用。 (12)deleteonexit:用于指定是否采用Java File类中的deleteOnExit()方法进行判断,如果使用这个方法,那么仅当存在文件时才进行删除,默认取值为false。 4.6.2 在执行Delete Task时使用文件过滤的实例(1)删除单个文件的实例: <delete file="/lib/ant.jar"/> 这个例子的作用是删除lib目录下的ant.jar文件。 (2)删除目录的实例: <delete dir="lib"/> 这个例子的作用是删除lib目录,包括这个目录的所有子目录及文件,可以通过include或exclude类型指定删除的部分文件,而不是目录下的所有文件。 (3)删除所有备份文件和空的目录的例子: <delete includeEmptyDirs="true"> <fileset dir="." includes="**/*.bak"/> </delete> 这个例子的作用是删除当前目录以及其子目录下的所有.bak文件,同时也删除所有空的目录。 http://book.csdn.net/bookfiles/379/10037914215.shtml |