`
mingren135
  • 浏览: 72529 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

groovy学习

 
阅读更多

 

最近项目用到了groovy,其实groovy底层就是java,能够编译为字节码,大部分情况能够用较少的代码完成java的功能,动态解释性的脚本语言,语法更加灵活,如果不先看看groovy的入门文章,会觉得挺怪,有多种语言结合的感觉在里面,一时还难以适应。下面的文章供参考:

1、精通 Groovy-使用 Groovy 的简单语法开发 Java 应用程序

http://www.ibm.com/developerworks/cn/education/java/j-groovy/index.html

2、each遍历详解

http://www.ibm.com/developerworks/cn/java/j-pg04149.html

3、文件操作

http://berdy.iteye.com/blog/1181018

4、xml解析详解

http://www.ibm.com/developerworks/cn/java/j-pg05199/index.html

-------------------------------------

1、文件的操作:对java原有的io进行了扩展,增加了许多闭包后省去了很多逻辑无关代码,同时自动进行资源管理和异常处理。 

 

2、each非常好用,不仅操作集合、映射,还能操作文件、数据库结果集等等。

//遍历文件夹下所有文件,是不是比java好用很多
def dir = new File("f:\\mtv")

fileNum=0
dirNum=0
dir.eachFileRecurse{
  file->
  if(file.isFile()){
    fileNum++
    println "FILE: ${file}"    
  }else if(file.isDirectory()){
    dirNum++
    println "DIR:  ${file}"
  }
}
println "fileNum="+fileNum
println "dirNum="+dirNum

 

//HTTP请求
def url = new URL("http://www.taobao.com")
def file = new File("d:\\aa.htm");
url.eachLine{line->
  file.append(line)
}
or
"http://www.taobao.com".toURL().eachLine{println it)}
-----------------------------------------------------
文件需要换行的话,需要增加换行符
def sepLine = System.getProperty('line.separator')
file << "$userId$sepLine"
//解析xml
def users = new XmlSlurper().parse("d:\\aa.xml")
users.user.each{ user ->
  println "${user.name},${user.age}"
}
//aa.xml
<users>
  <user>
    <name>Java</name>
    <age>22</age>
  </user>
  <user>
    <name>Groovy</name>
    <age>23</age>
  </user>
  <user>
    <name>Python</name>
    <age>24</age>
  </user>
</users>

 

import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

// 利用java 类查找jar包中的文件
def findJarFile(File zipFile, String target){
    ZipFile zip = new ZipFile(zipFile)
    ZipEntry entry = null
    Enumeration<? extends ZipEntry> en = zip.entries()
    while (en.hasMoreElements()) {
        entry = en.nextElement()
        if (entry.isDirectory()) {
            continue
        }

        if(entry.name.contains(target)){
            println zipFile.name
            println entry
        }
    }
    zip.close()
}

String target = 'LocalStrings.properties'
new File('E:\\apache-tomcat-6.0.14\\lib').eachFile{
    if(it.name.endsWith('.jar'))
        findJarFile(it, target)
}

 3、xml文件解析、创建等

//类似python的字符串声明,不需要java中的转义
def xml = """
<langs type="current">
  <language>Java</language>
  <language>Groovy</language>
  <language>JavaScript</language>
</langs>
"""
def langs = new XmlParser().parseText(xml)//parse("languages.xml"),文件解析
println "type = ${langs.attribute("type")}"
langs.language.each{
  println it.text()
}

 

//生成xml数据的代码非常简洁,各种java的三方库只能望其项背
def xml = new groovy.xml.MarkupBuilder()
//def sw = new StringWriter()
//def xml = new groovy.xml.MarkupBuilder(sw) //xml字符串输出到StringWriter
xml.langs(type:"current"){
  language(loc:"default","java")
  language("Groovy")
  language("JavaScript")
}
//output
<langs type='current'>
  <language loc='default'>java</language>
  <language>Groovy</language>
  <language>JavaScript</language>
</langs> 

 Groovy 能够实现这种 Builder 魔法,因为它是一种动态的语言。另一方面,Java 语言则是静态的:Java 编译器将确保所有方法在您调用它们之前都是确实存在的。(如果您尝试调用不存在的方法,Java 代码甚至不进行编译,更不用说运行了。)但是,Groovy 的 Builder 证明,某种语言中的 bug 正是另一种语言的特性。如果您查阅 API 文档中的 MarkupBuilder 相关部分,您会发现它没有 langs() 方法、language() 方法或任何其他元素名称。幸运的是,Groovy 可以捕获这些不存在的方法调用,并采取一些有效的操作。

 

 xml2种解析方式区别,XmlSlurper就像直接操作xml一样方便

def xml = """
<langs type='current' count='3' mainstream='true'>
  <language flavor='static' version='1.5'>Java</language>
  <language flavor='dynamic' version='1.6.0'>Groovy</language>
  <language flavor='dynamic' version='1.9'>JavaScript</language>
</langs>
"""

def langs = new XmlParser().parseText(xml)
println langs.attribute("count")
langs.language.each{
  println it.text()
}

langs = new XmlSlurper().parseText(xml)
println langs.@count
langs.language.each{
  println it
}

  

 

分享到:
评论

相关推荐

    Groovy学习笔记 PDF版

    在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...

    groovy 学习gradle学习经典手册

    《Groovy学习与Gradle实践经典手册》是一本深度探讨Groovy编程语言和Gradle构建工具的指南,专为Android及Java开发人员提供全面的知识覆盖。本书旨在帮助开发者提升在项目管理和自动化构建方面的技能,使其能够高效...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    groovy学习大礼包

    Groovy学习大礼包是一个全面的资源集合,旨在帮助初学者和有经验的开发者深入理解和掌握Groovy语言。这个礼包包含了三个关键的学习资料: 1. **Groovy轻松入门.doc** - 这份文档很可能是为新手设计的,提供了一个...

    Groovy 学习资料

    本学习资料将带你深入了解Groovy的魅力,并逐步掌握其核心概念与实践技巧。 1. **Groovy简介** Groovy是由James Strachan于2003年创建的,它的设计目标是简化Java的语法,提高开发效率。Groovy可以直接调用Java的...

    Groovy学习资料

    这份"Groovy学习资料"包含了深入理解和实践Groovy所需的关键知识点,帮助开发者从零基础到能够开发实际项目并成功上线。 首先,Groovy的基础语法是学习的重点。Groovy支持与Java相似的类、接口和继承结构,但其语法...

    Groovy学习资料-中文.rar

    Groovy学习资料-中文.rar。Groovy学习资料。Grails学习资料。mht网页格式。

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    Groovy学习笔记 Struts2集成--Groovy类作为Action

    通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...

    Groovy学习笔记(适合入门者)

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 **1.1 概念** Groovy是一种灵活且功能强大的编程语言,它与Java平台紧密结合,具备诸如Python和Ruby等动态语言的特点。该语言的设计初衷是为Java开发者提供一...

    groovy学习笔记

    以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...

    Groovy 学习笔记

    3. **Groovy Shell和GroovyConsole**: 这两个工具是学习和测试Groovy代码的好帮手,可以快速尝试和验证代码片段。 4. **GString**: Groovy的字符串支持模板语法,可以方便地进行字符串格式化,如`"Hello, ${name}"`...

    基于Groovy与Java融合的Groovy学习实践之路设计源码

    该项目是一套基于Groovy与Java融合的Groovy学习实践之路源码设计,总计包含91个文件,其中Groovy文件71个,XML文件6个,Java文件4个,Markdown文件2个,JSON文件2个,TXT文件2个,Git忽略文件1个,IML文件1个,以及...

    groovy学习资料

    - 提供的"groovy学习资料"和"groovy入门资料"可能是文档或PDF教程,这些资源可以帮助初学者快速了解Groovy的基础知识和实践技巧。 - "思想品德.doc"可能包含关于编程理念或最佳实践的内容,而"1.pdf"可能涵盖更...

    Grails&Groovy学习资料

    "Grails&Groovy参考资料"这个压缩包文件很可能是包含各种教程、文档、示例代码和其他学习资源的集合,可以帮助你深入理解和实践这两个技术。在学习过程中,你可以结合这些资料,通过阅读、编程练习和实际项目来提升...

Global site tag (gtag.js) - Google Analytics