Groovy窺探-高級語法

本章主要講解基礎中高級部分,主要內容爲代碼,如若不感興趣者,能夠大體瀏覽標題便可java

  • groovy json操做詳解node

    1. json轉換爲實體類對象(JsonSlurper)
      JsonSlurper slurper=new JsonSlurper()
      slurper.parse()
      複製代碼
    2. 實體類對象轉換爲json(JsonOutput)
      //普通格式輸出
      def list=[new Person(name: 'john',age: 20),new Person(name: 'Jane',age: 18)]
      println JsonOutput.toJson(list)
      
      //按照json格式輸出的結果
      def json=JsonOutput.toJson(list)
      println JsonOutput.prettyPrint(json)
      複製代碼

    大致介紹下第三方json的引用方式:json

    首先在和src同級的文件夾上建立libs文件夾,而後將jar文件複製到libs文件夾中,
    而後在jar文件上右鍵選擇add the library,到此就能夠愉快的使用第三方lib了。
    複製代碼
    1. 實戰演練:使用jsonSluper進行網絡數據解析
      def getNetworkData(String url){
          //發送http請求 java 
          def connection=new  URL(url).openConnection()
          connection.setRequestMethod('GET')
          connection.connect()
          def response=connection.content.text
          //將json轉化爲實體對象 groovy
          def  jsonSluper=new JsonSlurper()
          return jsonSluper.parseText(response)
      
      }
      
      def  reponse=getNetworkData('請求地址')
      //輸出你想要的結果
      println (reponse.data.head.name)
      複製代碼
  • xml文件操做詳解
    在Java中咱們對xml進行處理一般有兩種方式:
    ①DOM文檔驅動處理
    ②SAX事件處理(較爲節省內存,操做複雜)api

    1. 解析xml格式數據(XmlSlurper)
      final String xml = ''' <response version-api="2.0"> <value> <books id="1" > <book id="1" avaliable="10"> <title>Android開發藝術探索</title> <author id="1">任玉剛</author> </book> <book id="2" avaliable="100"> <title>第一行代碼</title> <author id="2">郭霖</author> </book> <book id="3" avaliable="100"> <title>瘋狂Android講義</title> <author id="3">李剛</author> </book> <book id="4" avaliable="100"> <title>Vue從入門到精通</title> <author id="3">李剛</author> </book> </books> </value> </response> '''
      
      //開始解析xml數據
      def xmlSpluper=new XmlSlurper()
      def response=xmlSpluper.parseText(xml)
      
      //打印title
      println( response.value.books.book[0].title.text())
      //打印出屬性節點的信息使用@
      println  response.value.books.book[1].@avaliable
      
      //開始解析xml數據
      def xmlSpluper = new XmlSlurper()
      def response = xmlSpluper.parseText(xml)
      //普通遍歷
      def list1 = []
      response.value.books.book.each{books->
          //對書進行遍歷
          def author=books.author.text()
          if (author.equals('李剛')){
              list1.add(books.title.text())
          }
      }
      println list1.toListString()
      
      
      //深度遍歷depthFirst()等價於"**"
      def title = response.depthFirst().findAll { book -> return book.author.text() == '李剛' ? true : false }
      println title.toListString()
      
      //廣度遍歷children()等價於"*"
      def resName=response.value.books.children().findAll{
          node->
              node.name()=='book' && node.@id=='2'
      }.collect{
          node->return  node.title.text()
      }
      println resName
      
      
      複製代碼
    2. 建立xml格式數據(MarkupBuilder)
      //靜態生成
      def sw= new StringWriter()
      //MarkupBuilder生成xml格式的數據核心類
      def xmlBuilder=new MarkupBuilder(sw)
      //建立根節點langs
      xmlBuilder.langs(type:'current',count:'3',
       mainstream:'true'){
          language(flavor:'static',version:'1.5','java'){age('16')}
          language(flavor:'dynamic',version:'1.6','Groovy')
          language(flavor:'dynamic',version:'1.9','JavaScript')
      }
      println sw
      
      
      //實體類動態生成
      class Langs{
          String type='current'
          int count=3
          boolean  mainstream=true
          def language=[
                  new Language(flavor:'static',version:'1.5',value:'java'),
                  new Language(flavor:'dynamic',version:'1.6',value:'Groovy'),
                  new Language(flavor:'dynamic',version:'1.9',value:'JavaScript')
          ]
      }
      
      class Language{
          String flavor
          String version
          String value
      }
      
      def sw1= new StringWriter()
      ////MarkupBuilder生成xml格式的數據核心類
      def xmlBuilder=new MarkupBuilder(sw)
      def langs=new Langs()
      xmlBuilder.langs(type:langs.type,count:langs.count,mainstream:langs.mainstream){
          langs.language.each {
              //遍歷全部的子節點
              lang->language(
       flavor:lang.flavor,version:lang.version,lang.value
              )
      
          }
      }
      
      println sw1
      複製代碼
      每日一練:
    經過上面的json和xml的操做,有興趣的小夥伴能夠嘗試將json數據轉換成xml的數據格式     
    複製代碼

    *** groovy 文件操做**
    java中處理文件的方式最多見的就是流處理(inputstream、outputstream等)。
    全部Java對文件的處理類,groovy均可以使用
    實戰演練:文本文件的讀寫和copybash

    def file1 ='/Users/用戶名/IDEProjects/MyGroovy/MyGroovy.iml'
        def file2 = '/Users/用戶名/IDEProjects/MyGroovy/MyGroovy2.iml'
        def result=copy(file1,file2)
        println result
        def copy(String sourcePath, String destationPath) {
            try {
                //建立目標文件
                def desFile = new File(destationPath)
                if (!desFile.exists()) {
                    desFile.createNewFile()
                }
                //開始拷貝
                new File(sourcePath).withReader { reader ->
                    def lines = reader.readLines()
                    desFile.withWriter {
                        write ->
                            lines.each {
                                line ->
                                    write.append(line+"\r\n")
                            }
                    }
                }
                return true
            }
            catch (Exception e) {
                e.printStackTrace()
            }
            return false
        
        }
    複製代碼

    實戰演練:對象的讀寫和copy網絡

    def person=new Person(name:'Haha',age:25)
        saveObject(person,'../../person.bin')
        readObject(''../../person.bin'')
        //對象保存
        def saveObject(Object object, String path) {
            try {
                //建立目標文件
                def desFile = new File(path)
                if (!desFile.exists()) {
                    desFile.createNewFile()
                }
                //開始拷貝
                desFile.withObjectOutputStream {
                    out -> out.writeObject(object)
                }
                return true
            }
            catch (Exception e) {
                e.printStackTrace()
            }
            return false
        }
        //對象讀取
        def readObject(String path){
            def obj=null
            try {
                def file=new File(path)
                if (file==null||!file.exists())return null
                file.withObjectInputStream {
                    input->obj=input.readObject()
                }
            }catch(Exception e){
        
            }
            return  obj
        }
    複製代碼

在Groovy中咱們不須要本身手動關閉流的操做。app

好了,到此爲此,咱們就已經將groovy的基礎部分講述完畢,基礎很重要,但願你們能多練習下前面的基礎內容部分。
從下一章節開始,咱們開始學習進階Gradle,下期再見學習

相關文章
相關標籤/搜索