开发方法及软件工程之ANT之文件操作

发表于:2007-06-22来源:作者:点击数: 标签:
在本文中,我们将考察如何执行常见文件操作,比如创建目录和解压缩文件。 Ant 的优秀特性之一在于,执行这些操作的任务一般在所有平台上都是相同的。 创建和删除目录 最基本的文件系统操作之一就是创建目录或文件夹。做这项工作的任务名为 mkdir,毫不奇怪,

   
  在本文中,我们将考察如何执行常见文件操作,比如创建目录和解压缩文件。 Ant 的优秀特性之一在于,执行这些操作的任务一般在所有平台上都是相同的。
  
  创建和删除目录
  

  最基本的文件系统操作之一就是创建目录或文件夹。做这项工作的任务名为 mkdir,毫不奇怪,它非常类似于具有相同名称的 Windows 和 UNIX/Linux 命令。
  
  <mkdir dir="archive/metals/zinc"/>
  
  首先要注意 / 被用作目录分隔符,这是 UNIX 和 Linux 的惯例。您可能认为这不是很平台无关的,但是 Ant 知道如何处理它,并针对它运行所在的平台做恰当的事情,这与我们在前面定义基于位置的属性时所看到的方式相同。我们能够同样容易地使用 \,而不管平台是什么 ?? Ant 能够处理任一种形式,甚至能够处理两种形式的混合。
  
  mkdir 任务的另一个有用特性是它的如下能力:在父目录还不存在时创建它们。考虑一下上面的清单,设想 archive 目录存在,但是 metals 目录不存在。如果使用底层平台的 mkdir 命令,您需要首先显式地创建 metals 目录,然后第二次调用 mkdir 命令来创建 zinc 目录。但是 Ant 任务比这更加智能,它能够一次性创建这两个目录。类似地,如果目标目录已经存在,mkdir 任务不会发出错误消息,而只是假设它的工作已经完成,从而什么也不做。
  
  删除目录同样也很容易
  
  <delete dir="archive/metals/zinc"/>
  
  这将删除指定的目录连同它包含的所有文件以及子目录。使用 file 属性而不是 dir 属性可以指定要删除的单个文件。
  
  复制和移动文件及目录
  
  在 Ant 中制作文件的一份拷贝很简单。例如:
  
  <copy file="src/Test.java" tofile="src/TestCopy.java"/>
  
  您还可以使用 move 来执行重命名操作而不是拷贝文件:
  
  <move file="src/Test.java" tofile="src/TestCopy.java"/>
  
  另一个常用的文件系统操作是将文件复制或移动到另一个目录。做这项工作的 Ant 语法同样也很简单:
  
  <copy file="src/Test.java" todir="archive"/>
  
  <move file="src/Test.java" todir="archive"/>
  
  默认情况下,Ant 仅输出它执行的移动和复制操作的摘要,包括诸如已移动或复制的文件的数量等信息。如果想看到更详细的信息,包括涉及的文件名称等,您可以将 verbose 属性设置为true。
  
  创建和解压缩 zip 及 tar 文件
  
  在前一节中,我们看到了如何创建 JAR 文件。创建其他归档文件的过程几乎完全相同。下面是创建zip 文件的 Ant 任务:
  
  <zip destfile="output.zip" basedir="output"/>
  
  相同的语法也可用于创建 tar 文件。 还可以使用 GZip 和 BZip 任务来压缩文件。例如:
  
  <gzip src="output.tar" zipfile="output.tar.gz"/>
  
  解压缩和提取文件同样也很简单:
  
  <unzip src="output.tar.gz" dest="extractDir"/>
  
  还可以包括 overwrite 属性来控制覆盖行为。默认设置是覆盖与正在被提取的归档文件中的条目相匹配的所有现有文件。相关的任务名称是 untar、unjar、gunzip 和 bunzip2。
  
  替换文件中的标记
  
  我们将在本节考察的最后一个文件系统操作是 replace 任务,它执行文件中的查找和替换操作。token 属性指定要查找的字符串,value 属性指定一个新的字符串,查找到的标记字符串的所有实例都被替换为这个新的字符串。例如:
  
  <replace file="input.txt" token="old" value="new"/>
  
  替换操作将在文件本身之内的适当位置进行。为了提供更详细的输出,可把 summary 属性设置为true。这将导致该任务输出找到和替换的标记字符串实例的数目。

原文转自:http://www.ltesting.net