1.知识点:
对象转json字符串:JsonOutput.toJson(OBJ) json(file等)转对象:new JsonSlurper().parse(file)
当前module根目录:project.projectDir
将文本写入文件:new File("").withWriter('utf-8'){ writer -> writer.write text }
执行本module下的gradle文件:apply from: project.file('*.gradle')
2.代码实战。从一个文件读取文本进行一番处理后写入另一个文件,在当前module下新建一个gradle文件:
import groovy.json.JsonOutput
class Model {
String type
String name
String version
}
class LabRequirementTable {
String version
Map<String, ArrayList<String>> data
}
class RequirementTable {
String version
Map<String, ArrayList<Model>> data
}
//读取csv文件得到算法模型映射关系
def getFilesRecursive(File file, Map<String, ArrayList<String>> data) {
List<String> text = file.readLines()
//第一行是列名
for (int i = 1; i < text.size(); i++) {
String line = text.get(i)
int separator1 = line.indexOf(",")
int separator2 = line.indexOf(",", separator1 + 1)
String requirement = line.substring(0, separator1)
String modelName = line.substring(separator1 + 1, separator2)
if (data.get(requirement) == null) {
ArrayList<String> arrayList = new ArrayList<>()
arrayList.add(modelName)
data.put(requirement, arrayList)
} else {
ArrayList<String> arrayList = data.get(requirement)
arrayList.add(modelName)
data.put(requirement, arrayList)
}
}
}
//根据lab提供的算法模型映射表和扫描assets中的文件生成最终算法模型表
def LAB_FILE = 'src/main/java/com/bef/effectsdk/lab_requirements.csv'
File labStr = new File(
project.projectDir, LAB_FILE)
Map<String, ArrayList<String>> map = new HashMap<>()
getFilesRecursive(labStr, map)
LabRequirementTable result = new LabRequirementTable()
result.data = map
result.version = "3.6.0"
Map<String, ArrayList<Model>> data = new HashMap<>()
def LIB_LIST_JAVA_FILE = 'src/main/java/com/bef/effectsdk/ModelsList.java'
def localModels = new File(
project.projectDir, LIB_LIST_JAVA_FILE).getText('UTF-8')
for (Map.Entry<String, ArrayList<String>> requirement : result.data.entrySet()) {
ArrayList<Model> arrayList = new ArrayList<>()
for (String modelName : requirement.value) {
Model model = new Model()
int startIndex = modelName.indexOf("_v")
model.name = modelName.substring(0, startIndex)
if (localModels.contains(modelName)) {
model.type = "asset"
int endIndex = modelName.length() - ".model".length()
model.version = modelName.substring(startIndex + 2, endIndex)
} else {
model.version = "version_not_exist"
model.type = "not_exist"
}
arrayList.add(model)
}
data.put(requirement.key, arrayList)
}
RequirementTable requirementTable = new RequirementTable()
requirementTable.version = result.version
requirementTable.data = data
def LOCAL_REQUIREMENT_FILE = "src/main/java/com/bef/effectsdk/localAlgorithmMap.json"
def jsonStr = JsonOutput.toJson(requirementTable)
new File(project.projectDir, LOCAL_REQUIREMENT_FILE).withWriter('utf-8') { writer ->
writer.write jsonStr
}
3.其他
执行指令:str.execute()。举个例子,删除文件:
"rm -rf ${project.projectDir}/src/main/assets/${modelPath}".execute()
我错了,上面这种命令行是异步的,还是要用groovy提供的API:
delete "${project.projectDir}/src/main/assets/${modelPath}"