2015年1月21日

Gradle(3)–– 檔案處理




我們在開發軟體時,我們時常需要對檔案和目錄作處理,例如我們需要複製檔案到另外一個目錄理或是需要移動某些檔案到其他目錄。常用的型態

type 說明
copy 複製
zip 壓縮




檔案操作

(1)檔案顯示: 我們使用gradle的file()它用來解析檔案的目錄和檔案,file()是使用java.io.File的物件來操作。
範例一、 txt目錄中有兩個檔案為a.txt和b.txt,可以顯示txt底下所有的檔案
File txt = file('txt/')
for(File f : txt.listFiles()){
    println(f.getName())
}
image
範例二、使用Url和Uri操作URL url = new URL('file: D:\\gradle\txt')
URI uri = new URI(‘file: D:\\gradle\txt’)

(2) 檔案樹(file tree): 我們利用fileTree()函式顯示目錄和ZIP的檔案樹狀結構,我們也可以利用pattern來做檔案的過濾。matching方法閉包用來自訂方法include、includes、exclude和excludes來自訂過濾的樣式

pattern :
  *  -> 符合任何字串樣式
  ?  –> 符合單一字串樣式
**  –> 符合任何檔案或是目錄的字串樣式

範例一、顯示txt目錄底下的java檔image
def treeFiles = fileTree(dir:'txt').matching{
                    include '**.java'
                }

treeFiles.visit{FileVisitDetails fileDetails ->
    if(fileDetails.directory){
        println "directory: ${fileDetails.relativePath}"
    }else{
        println("filename: ${fileDetails.name}")
    }
}

說明: 利用fileTree建構子指定目錄,利用matching的閉包(closure)過濾只有.java的檔案。
(3) copying files : 檔案操作需要複製檔案,使用Copy的閉包來操作檔案
方法:
from() :從哪裡複製檔案
to() : 複製到哪裡
include() : 包含條件
exclude: 排除條件

範例一、將txt目錄複製到copyTxt目錄裡面

task copyFile(type: Copy){
    from 'txt'
    into 'copyTxt'
}

#> gradle  copyFile
範例二、將txt目錄只有複製.java的檔案到copyTxt目錄裡面
task copyFile(type: Copy){
    from 'txt'
    into 'copyTxt'
    include '**.java,**.gif'
}

#> gradle  copyFile

(4) Renaming files : 更改檔案名稱


範例一、副檔名為txt會更改為text

task renameFile(type: Copy){
    from 'txt'
    rename{
        String fileName ->
        if(fileName.endsWith('txt')){
            String org = fileName - ".txt" + ".text"
        }
    }

    into 'renameTxt'
}
(4)打包操作(Archiving files) : 當很多檔案需要打包到Zip、Jar、War、Tar等等,我們使用Gradle作歸檔操作需要檔名的設定如[baseName]-[appendix]-[version]-[classifier]。
範例一、 把txt目錄檔案打包成ZIP
task archiveFiles(type: Zip){
    from 'txt'
    into 'zip'
   
    // Create output filename.
    baseName = 'txtFile'
    appendix = 'archive'
    extension = 'zip'
    version = '1.0'
    classifier = ''
}
說明: 打包為txtFile-archive-1.0.zip
範例二: 打包為tar的檔案,利用GZIP的方式壓縮
task archiveTar(type: Tar){
    from 'txt'
    into 'tar'
   
    // Create output filename.
    baseName = 'txtFile'
    appendix = 'archive'
    extension = 'tar.gz'
    version = '1.0'
    classifier = ''
    compression = Compression.GZIP // or Compression.BZIP2
}

沒有留言:

張貼留言