Groovy之高級語法

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 去關閉流了。。。

    • 元編程,在運行的時候可以動態的注入字符,方法,靜態方法,默認是對當前的文件生效,但是可以修改配置,使其全局生效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章