1. 程式人生 > >ant中對檔案和目錄進行復制和刪除

ant中對檔案和目錄進行復制和刪除

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目錄,並在所有檔案中查詢並替換@[email protected]為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檔案,同時也刪除所有空的目錄。

相關推薦

ant檔案目錄進行刪除

4.5 Copy Task:對檔案和目錄進行復制 Copy 任務把一個或多個檔案複製到指定的目錄下。但要注意的是,如果目標目錄下具有同名的檔案,那麼只有當原始檔相對於目標檔案更新時,Ant工具才會複製這個檔案。在Copy任務中可以使用FileSet型別來定義檔案集合。 4.5.1 Copy Task的屬性及

import shutil 進行移動檔案或者資料夾

#複製檔案: shutil.copyfile("oldfile","newfile") #oldfile和newfile都只能是檔案 shutil.copy("oldfile","newfile") #oldfile只能是資料夾,newfile可以是檔案,也可以是目標目錄

Unity 檔案的簡單的寫入方法 Filestream函式

最近在寫遊戲的時候,用到很多讀取和寫入,現在就帶大家簡單的瞭解一下檔案的讀取和寫入(這裡我們先說檔案的寫入,讀取我們會在下一篇說)。 我們都知道,要寫一個檔案或讀取一個檔案,必須知道檔案的路徑。 這裡我們就以Unity為例,Unity中獲取路徑的方法: Applicatio

java+maven工程 實現 自動war包進行並修改替換每個的配置檔案

   在工作中碰到一個比較苦惱的事情,(這裡以7條線為例子)同一個war包 需要部署7條生產線,但是每個生產線的編號以及ip都不同,導致我們手動的每個包去替換配置檔案和配           置ip的js檔案   &n

Python檔案目錄的操作

用到的核心模組有:os   shutil 檔案的建立:f = open("檔名", "w")  注:如果涉及到亂碼問題需要在後面加上encoding="utf-8" 檔案內容的讀取:f = open("檔名", "r") 檔案的重新命名:os.rename("之前的

Python檔案流的操作,以及jsonpickle的理解

1.關於Python對檔案流的操作: 格式:open( 檔名,模式,encoding=‘utf8’,buffering=-1 ) encoding->編碼 buffering->快取,預設-1 本人也是初學者,在Python官網上看到的相關的文件,說的不好還請諒解,指出。

java+maven工程 實現 自動war包進行並修改替換每個的配置文件

classes cep res 發生 分離 sys span 一個 pla 在工作中碰到一個比較苦惱的事情,(這裏以7條線為例子)同一個war包 需要部署7條生產線,但是每個生產線的編號以及ip都不同,導致我們手動的每個包去替換配置文件和配 置ip

在vsphere讓本地PC虛擬機器可以進行貼上

問題描述:在實際操作中,需要進虛擬機器中的某項軟體進行啟用,然而啟用碼儲存在本機PC上,怎樣將本機PC上的資訊複製並貼上到虛擬機器上 ? 在預設情況下,VMware vSphere已禁用針對ESXESXi的複製和貼上操作,以防止公開已複製到剪貼簿中的敏感資料。 解決方

黑馬程式設計師——————使用NIO檔案進行(2)

由於檔案複製到檔案和檔案複製到資料夾的程式碼具有重複性,所以兩者方法可結合在一起。 分析: 1,複製到資料夾程式碼多了一層判斷: f(!targetFile.exists())targetFile.mkdirs(); 2,當targetFile為檔案時,targetFile

c語言檔案的建立讀寫

在c語言中,fopen用於建立檔案,fwrite用於將資料寫入檔案,而fread用於讀取檔案中的資料,fclose用於關閉檔案(在有些編輯器中如VS2017要使用fopen_s、fwrite_s和fread_s、fclose_s或者在程式碼開始前使用#pragram warn

C/C++按照檔案屬性檔案進行、移動、刪除操作

//歡迎指正,轉載請註明出處:https://blog.csdn.net/qq_42189368/article/details/80670210 ////程式碼:資料夾中限制檔案數目,超出數目後,按照建立時間順序,刪除時間最早的檔案 #include <io.

node.js 使用fs模組系統檔案目錄進行讀寫操作

如果要用這個模組,首先需要引入,fs已經屬於node.js自帶的模組,所以直接引入即可 var fs = require('fs');1.讀取檔案readFile方法使用 fs.readFile(filename,[option],callback) 方法讀取檔案。

Androidxml佈局檔案使用include引入佈局進行用(解決使用include佈局重疊,顏色設定無效問題)

使用include引入佈局的作用   提取重複的佈局程式碼,方便進行復用 如何使用   比如我們想要線上性佈局中建立三塊需要複用的佈局headview、centerview、butto

python檔案內容多行內容進行刪除

# Author Richard_Kong # !/usr/bin/env python # --*-- encoding:utf-8 --*-- """ 思路:將要刪除的Str儲存為新的檔案,兩個檔案對內容比較後進行刪除 """ def delete_file(file,S

VC++檔案的寫入讀取

VC++中對檔案的寫入和讀取 本文介紹兩種方法對檔案進行讀取和寫入操作:1、採用fstream類;2、採用CStdioFile類。 CStdioFile繼承自CFile,一個CStdioFile物件代表一個用執行時函式fopen 開啟的C 執行時流式檔案。 C++中

jsp 檔案及資料夾進行操作

  /**    * 複製單個檔案    * @param oldPath String 原檔案路徑 如:c:/fqf.txt    * @param newPath String 複製後路徑 如:f:/fqf.txt    * @return boolean    */   public voi

在Xshell使用sz、rz進行本機遠端主機(或虛擬機器)之間檔案的傳輸

藉助XShell,使用linux命令sz可以很方便的將伺服器上的檔案下載到本地,使用rz命令則是把本地檔案上傳到伺服器。     其中,對於sz和rz的理解與記憶我用瞭如下的方法(很多時候容易搞混):     sz中的s意為send(傳送),告訴客戶端,我(伺服器

JavaScript象的淺

ceo 遞歸調用 urn function 實體 代碼 適用於 遞歸 原型 在JavaScript中,如果要復制一個變量我們應該怎麽做呢?下面這種做法是最簡單的一種形式: //把a復制給b let a = 12; let b = a; 這種復制方法只能適用於基本類型,如果a

Java的深拷貝(深)淺拷貝(淺)

alt public min import containe long serializa port nbsp 深拷貝(深復制)和淺拷貝(淺復制)是兩個比較通用的概念,尤其在C++語言中,若不弄懂,則會在delete的時候出問題,但是我們在這幸好用的是Java。雖然java

mybitis象字段與表字段名稱不匹配()

復制 diamond ocl value bat lai shape tag where 開發中,實體類中的屬性名和對應的表中的字段名不一定都是完全相同的,這樣可能會導致用實體類接收返回的結果時導致查詢到的結果無法映射到實體類的屬性中,那麽該如何解決這種字段名和實體類屬性名