Gradle基本使用(5):檔案操作
阿新 • • 發佈:2019-01-22
檔案集合的遍歷
1
建立檔案樹 1
其中 form 引數可以有多個,可以是一般的檔案,目錄,ZIP、TAR等檔案歸檔,如下: 1
1
collection.each {File file ->
2
println file.name
3
}
檔案集合可以進行合併、排除等集合操作,如下:
1FileCollection collection = files { file('src').listFiles() }
2def union = collection + files('./file1.txt'); //合併操作
3def different = collection - files('src/file1.txt' ); //排除操作
檔案樹
檔案樹是按層次結構排序的檔案集合,使用 FileTree 介面(繼承自 FileCollection 介面),檔案樹可能表示一個目錄樹或 ZIP 檔案的內容;建立檔案樹 1
//方式1:使用一個基本目錄建立
2
FileTree tree = fileTree(dir: 'src/main')
3
tree.include '**/*.java' //向檔案樹新增檔案
4
tree.exclude '**/Abstract*' //從檔案樹排除檔案
5
6
//方式2:可以對方式1實現鏈式呼叫
7
FileTree tree = fileTree(dir: 'src/main').include('**/*.java').exclude('**/Abstract*')
8
9
//方式3:使用map建立
10
FileTree tree = fileTree(dir: 'src', include: '**/*.java', exclude: '**/*test*/**')
11
FileTree tree = fileTree(dir: 'src', include: ['**/*.java','**/*.xml'] exclude: '**/*test*/**' )
使用檔案樹
1//遍歷檔案樹
2tree.each {File file ->
3 println file
4}
5
6//過濾檔案樹
7FileTree filtered = tree.matching {
8 include 'org/gradle/api/**'
9 exclude '**/Abstract*'
10}
11
12//合併檔案樹
13FileTree sum = tree + fileTree(dir: 'src/test')
建立 ZIP、TAR 等檔案歸檔的檔案樹
1
FileTree zip = zipTree('someFile.zip')
2
FileTree tar = tarTree('someFile.tar')
複製檔案
複製檔案 gradle 提供了 copy type 的 task api 用於實現簡便的檔案複製,基本使用如下: 1task copyTask(type: Copy) {
2 from 'src/main/webapp'
3 into 'build/explodedWar'
4}
from,into 方法都可以接收 檔案字串型別引數,file物件,FileCollection物件,FileTree 物件,task返回引數等;其中 form 引數可以有多個,可以是一般的檔案,目錄,ZIP、TAR等檔案歸檔,如下: 1
task anotherCopyTask(type: Copy) {
2
from 'src/main/webapp'
3
from 'src/staging/index.html'
4
from task3
5
from copyTaskWithPatterns.outputs
6
from zipTree('src/main/assets.zip')
7
into { getDestDir() }
8
}
同時在複製過程中可以對檔案進行篩選
1task copyTaskWithPatterns(type: Copy) {
2 from 'src/main/webapp'
3 into 'build/explodedWar'
4 include '**/*.html'
5 include '**/*.jsp'
6 exclude { details -> details.file.name.endsWith('.html') && details.file.text.contains('staging') }
7 //其中exclude使用了一個閉包作為引數,details引數代指複製過程中的file
8}
重新命名檔案
1
task rename(type: Copy) {
2
from 'src/main/webapp'
3
into 'build/explodedWar'
4
5
//使用閉包作為引數
6
rename { String fileName ->
7
fileName.replace('-staging-', '')
8
}
9
//使用正則表示式作為引數
10
rename '(.+)-staging-(.+)', '$1$2'
11
}