4.5 Copy Task:對文件和目錄進行復(fù)制
Copy 任務(wù)把一個或多個文件復(fù)制到指定的目錄下。但要注意的是,如果目標目錄下具有同名的文件,那么只有當源文件相對于目標文件更新時,Ant工具才會復(fù)制這個文件。在Copy任務(wù)中可以使用FileSet類型來定義文件集合。
4.5.1 Copy Task的屬性及功能
Copy 任務(wù)具有以下屬性:
(1)file:用于指定要復(fù)制的源文件。
(2)preservelastmodified:作用是使得復(fù)制后的文件與源文件的最后修改時間相同。默認為false。
(3)tofile:用于指定要復(fù)制到的文件。
(4)todir:用于指定要復(fù)制到的目標目錄。todir和tofile只能使用其中一個屬性。
(5)overwrite:用于指定是否需要覆蓋目錄和文件,不管文件是否比源文件新,都會覆蓋。默認為false。
(6)filtering:用于指定在復(fù)制時是否使用構(gòu)件文件的全局過濾器對文件進行過濾。默認為false。
(7)flatten:用于指定是否需要復(fù)制目錄,如果為true代表把所有的文件復(fù)制到todir屬性設(shè)定的目錄下。默認為false,復(fù)制目錄。
(8)includeEmptyDirs:用于指定是否復(fù)制空目錄。默認為true。
(9)failonerror:用于指定當遇到錯誤時是否停止執(zhí)行。默認為true。
(10)verbose:用于指定當復(fù)制文件時是否記錄日志信息。
(11)encoding:用于設(shè)定復(fù)制文件時的編碼或文件過濾器使用的編碼方式。默認時使用Java虛擬機的編碼方式。
(12)outputencoding:指定寫文件時的編碼方式。默認時使用Java虛擬機的編碼方式。
(13)enablemultiplemappings:用于設(shè)定是否允許多個映射。默認為false。
(14)granularity:用于指定一個文件修改時間的毫秒數(shù)據(jù)的允許誤差。因為不是所有的文件系統(tǒng)的修改時間都是精確到毫秒數(shù)。默認時為0,如果為DOS系統(tǒng)則為2。
4.5.2 通過Copy Task實現(xiàn)文件和目錄復(fù)制功能實例
不管是對程序進行打包還是一般的文件操作,基本上都離不開復(fù)制功能。通過Ant工具的Copy任務(wù)可以讓程序在Windows和Linux/UNIX下對文件和目錄進行復(fù)制操作。例如:
(1)對單個文件進行復(fù)制:
<copy file="myfile.txt" tofile="mycopy.txt"/>
這個例子的作用是在當前目錄復(fù)制myfile.txt,并把復(fù)制的文件命名為mycopy.txt。當需要把文件復(fù)制到別外的目錄時可以這樣編寫:
<copy file="myfile.txt" todir="../some/other/dir"/>
這個例子的作用是把文件復(fù)制到與當前目錄同級的some目錄的/other/dir子目錄下。這里“..”代表相對路徑(當前目錄的上一級目錄)。
(2)對文件目錄進行復(fù)制:
<copy todir="../new/dir">
<fileset dir="src_dir"/>
</copy>
這個例子的作用是把src_dir目錄復(fù)制到../new/dir目錄下。有時對文件進行復(fù)制時需要對文件進行備份。下面舉一個復(fù)制文件時對文件進行備份的例子。
<copy todir="../backup/dir">
<fileset dir="src_dir">
<exclude name="**/*.java"/>
</fileset>
<globmapper from="*" to="*.bak"/>
</copy>
這個例子的作用是把src_dir目錄及其子目錄下所有非Java文件復(fù)制到../backup/dir目錄下,并重命名為bak文件,以作備份。
4.5.3 在執(zhí)行Copy Task時使用文件過濾的實例
下面是一個復(fù)制文件的同時替換文件中的特殊符號的例子:
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<filterset>
<filter token="TITLE" value="Foo Bar"/>
</filterset>
</copy>
這個例子的作用是把src_dir目錄下的所有文件復(fù)制到../backup/dir目錄,并在所有文件中查找并替換@TITLE@為Foo Bar。當要進行新產(chǎn)品發(fā)布時通過需要替換文件中的版本信息和時間信息。
說明:在Ant工具中還提供了copydir和copyfile這兩個特定的任務(wù),分別用于對目錄和文件進行復(fù)制。但自從有了Copy任務(wù)后,這兩個任務(wù)已過期,不建議再使用,應(yīng)該統(tǒng)一使用Copy任務(wù)。
4.6 Delete Task:對文件和目錄進行刪除
Delete 任務(wù)可用于刪除一個或多個文件,或刪除一個或多個目錄和目錄下的文件。默認時不會刪除空目錄,要刪除空目錄可以設(shè)定includeEmptyDirs屬性為true。在Delete任務(wù)中可以使用FileSet和DirSet類型。
4.6.1 Delete Task的屬性及功能
Delete任務(wù)包括以下屬性:
(1)file:用于指定要刪除的文件的名稱,可以為相對路徑或絕對路徑。
(2)dir:指定一個將要被刪除的根目錄。這個目錄下的子目錄及文件將可能被刪除。dir屬性和file屬性兩者必須指定其一。
(3)verbose:作用是指定是否在命令行中輸出被刪除的文件的名稱。默認為false。
(4)quiet:作用是指定當要被刪除的文件或目錄不存在時是否不顯示提示信息。默認為false,代表要顯示提示信息。
(5)failonerror:用于指定當出現(xiàn)錯誤時是否停止執(zhí)行命令。
(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 在執(zhí)行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