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文件,同時也刪除所有空的目錄。 |
只有注冊用戶登錄后才能發表評論。 | ||
![]() |
||
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關文章:
|
||