json 操作
-
將實體對象轉換Wie Json
def list = [new Person(name: "張三", age: 20), new Person(name: "李四", age: 22), new Person(name: "王五", age: 25)]; def json = JsonOutput.toJson(list) println json //輸出 json 串 println JsonOutput.prettyPrint(json) //按照格式輸出
-
將 json 串轉爲對象
List<Person> newJson = new JsonSlurper().parseText(json) as List<Person> println newJson[0].name + "----" + newJson[0].age
XML
xml 對於我來說沒用過,所有就。。。
文件操作
-
遍歷文件
def file = new File("../../GroovySpecifcation.iml") //遍歷文件 file.eachLine { println it }
-
讀取文件
def result = file.getText() //獲取文件中內容 println result def result = file.readLines()//將每一行的數據放在列表中 println result
-
獲取文件中一部分內容
def reader = file.withReader { //獲取文件中的一部分內容 read -> char[] buffer = new char[100]; read.read(buffer) return buffer } println reader
-
copy 一個文件
static def copy(String patch, String newFile) { //創建目標文件 def file = new File(newFile) if (!file.exists()) { file.createNewFile() } //copy new File(patch).withReader { //閉包參數 read -> //將文件讀取到列表中 def lines = read.readLines() file.withWriter { write -> //遍歷列表,將數據寫入到目文件中 lines.each { line -> write.append(line + "\n") } } } return true } copy("../../GroovySpecifcation.iml", "../../GroovySpecifcation2.iml")
-
讀寫對象
//保存對象 static def saveObject(Object o, String filePath) { //創建目標文件 def file = new File(filePath) if (!file.exists()) { file.createNewFile() } file.withObjectOutputStream { //閉包參數 out -> out.writeObject(o)//保存對象到指定文件中 } } //讀取對象 static def readObject(String patch) { File f = new File(patch) f.withObjectInputStream { read -> def obj = read.readObject() //讀取對象 Person p = obj as Person //轉型 println p.name + "---" + p.age } } saveObject(new Person(name: "張三", age: 20), "../../person") readObject("../../person")
注意:這裏的 Person 對象需要被序列化
總結
到這裏基礎的就學的差不多了。感覺還是挺簡單的,因爲是基於 java 的,所以學起來還是很友好。
groovy 和 java 的區別
- 寫法上:非常隨意,沒有 java 那麼多的限制,例如 不用寫逗號,return 可寫 可不寫,可以直接當做腳本來寫,main 方法 和 class 都不需要。
- 功能上:功能更全面吧,在 java 的基礎上有添加了很多方法,並且使用起來非常簡單,特別是閉包的使用,簡直了。。還有強大的元編程,可以再運行期間動態的生成字段,方法等,非常強大。並且兼容 java 的所有功能
- 作用上:可以寫 應用,也可以寫腳本,但大多時候是用來寫腳本的。
重要的地方
-
強定義和弱定義,變量,字符串,循環等基本的語法
-
數據結構,列表,映射,範圍等。注意列表默認是 ArrayList ,映射LinkedHashMap ,範圍則是繼承自列表的。需要需要改變可以通過 as 來修改,如 def list = [1,4,6] as LinkedList。
-
類,方法,面向對象,這些基本和 java 差不多,只不過 定義方法時 def 代表的返回值就是 Object 了。而 類默認繼承的是 GroovyObject,而不是 Object。
-
閉包,這個是一個比較重要的東西,說一下筆者的理解:可以把它看成一個代碼塊,這個代碼塊有參數,有返回值,而且還可以作爲參數傳遞。groovy 中的很多方法都需要傳入一個閉包,這個閉包的功能由我們自己來確定,groovy 在這個方法的內部就會調用閉包,然後閉包就會執行。所以在使用 groovy 一寫需要傳入閉包的方法時,不妨先看一下方法內部的實現,就算看不懂,你也需要看一下方法內部在調用閉包是有沒有傳入參數,傳了幾個,是什麼類型!!!
-
json格式,文件的處理,感覺實在 java 的基礎上進行封裝,整體上感覺方便多了,再也不是要 try catch 去關閉流了。。。
-
元編程,在運行的時候可以動態的注入字符,方法,靜態方法,默認是對當前的文件生效,但是可以修改配置,使其全局生效。