• 节点流,InputStream,OutputStream及其子类
  • 处理流,Reader,Writer及其子类

2. groovy文件处理

所有java对文件的处理类,groovy都可以使用。
groovy拓展了许多更加快捷和强大的方法。
groovy把文件看做是一种资源,提供的方法都是通过ResourceGroovyMethods提供的。

2.1 遍历文件内容

2.1.1 readLine()方法

groovy提供了eachLine()方法,可以遍历文件中每行内容:

def file = new File('../../GroovySpecIflcation.iml')
file.eachLine { line ->
    println line

2.1.2 getText()方法

groovy提供了另外一种方法获取文件的内容,这个方法就是getText():

def file = new File('../../GroovySpecIflcation.iml')
def text = file.getText()
println text

2.1.3 readLines()方法

也可以通过readLines()方法获取,这个方法返回的是List,它会把文件每一行内容都当做一个元素存储在List中返回。

def result = file.readLines()

2.1.4 withReader()方法

groovy通过withReader()方法可以读取某一部分的内容,与之对应的方法是withWriter()方法,提供写入一部分内容功能。

//读取文件部分内容
def reader = file.withReader { reader ->
    char[] buffer = new char[100]
    reader.read(buffer)
    return buffer
println reader

2.2 实现复制功能

通过withReader()和withWriter()方法实现复制文件功能:

def result = copy('../../GroovySpecIflcation.iml'
        , '../../GroovySpecification2.iml')
println result
def copy(String sourcePath, String destationPath) {
    try {
        //首先创建目标文件
        def desFile = new File(destationPath)
        if (!desFile.exists()) {
            desFile.createNewFile()
        //开始copy
        new File(sourcePath).withReader { reader ->
            def lines = reader.readLines()
            desFile.withWriter { writer ->
                lines.each { line ->
                    writer.append(line + "\r\n")
        return true
    } catch (Exception e) {
        e.printStackTrace()
    return false

groovy提供的文件操作方法会默认帮助处理关闭流,所以并不需要我们自己去关闭相关的文件流。

2.3 对象读写

groovy使用withObjectOutputStream和withObjectInputStream方法实现对象的读写,对象存储是按照字节存储的。

def person = new Person(name: 'Qndroid', age: 26)
saveObject(person, '../../person.bin')
def result = (Person) readObject('../../person.bin')
println "the name is ${result.name} and the age is ${result.age}"
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) {
    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
Person.groovy
class Person implements Serializable {
    String name
    Integer age
    def increaseAge(Integer years) {
        this.name += years
    def invokeMethod(String name, Object args) {
        return "the methos is ${name}, the params is ${args}"
    def methodMissing(String name, Object args){
        return "the methos is ${name} is missing"
MIT许可证(MIT)
 特此免费授予获得此软件和相关文档文件(“软件”)副本的任何人无限制地处理软件的权利,包括但不限于使用,复制,修改,合并的权利,发布,分发,再许可和/或出售本软件的副本,并允许配备有本软件的人员这样做,但必须满足以下条件:
 以上版权声明和此许可声明应包含在本软件的所有副本或大部分内容中。
 该软件按“原样”提供,不提供任何形式的明示或暗示担保,包括但不限于对适销性,特定目的的适用性和非侵权性的担保。 无论是由于
                                              Groovy Tip 2 each方法和break 在Groovy这样的动态语言中,闭包是其中的一个重要武器。而这些语言的开发者自然不会放弃使用这些武器,我们可以看到在Groovy语言的集合类中,广泛的使用了闭包。其中,each方法就是这样一个使用闭包的方法。我们知道,在Java中,我们使用下面的语句对集合类对象进行遍历:    for(int i=0;isiz
                                    文章目录1、读取XML文档1.1、使用DOM解析1.2、使用groovy解析1.3、使用SAX解析1.4、使用StAX解析文档(Streaming API For XML)2、处理XML2.1、一处处理2.2、流处理2.3、更新XML2.4、使用XPath合并3、解析和建立JSON3.1、解析JSON3.2、构建JSON4、总结
1、读取XML文档
1.1、使用DOM解析
节点类型: ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE
java解析xml文件
构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征,例如动态类型转换、闭包和元编程(metaprogramming)支持
没有特意去官网下载必要的组件。基于android studio并且使用idea来使用非常简便。
三、特点概述
基于java,也是面向对象的;借鉴Python,Ruby,Smalltalk等语...
                                    中each、find方法是一个闭包操作,要想跳出循环要使用 return true,但有几个问题有待研究:1、groovy each 中的return true 相当于Java中的continue ,2、groovy find中的return true 相当于Java中的break,
                                    Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库。
                                    1. 首先,网上很多教程有写怎么使用java内置的gzip工具类,这里就不多少了,主要是想说一下,当我们压缩生成gz文件的时候,如果要保留原始文件的后缀,比如a.xml压缩成a.xml.gz 那么,我们在生成压缩包指定文件名的时候把这个.xml加上。
Gzip工具类:
package com.util;
import java.io.*;
import java.util.zip.GZIP...
                                    一、背景介绍网关作为微服务生态中的重要一环,由于历史原因,中间件团队没有统一的微服务API网关,为此准备技术预研打造一个功能齐全、可用性高的业务网关。二、技术选型常见的开源网关按照语言分类有如下几类:Nginx+Lua:OpenResty、Kong 等;Java:Zuul1/Zuul2、Spring Cloud Gateway、gravitee-gateway、Dromara Soul 等;Go:...
                                    比如,Groovy对自己的定义就是:Groovy是在 java平台上的、 具有像Python, Ruby 和 Smalltalk 语言特性的灵活动态语言, Groovy保证了这些特性像 Java语法一样被 Java开发者使用。就是Gradle的“潜规则”,如果一个类中有名为xxyyzz这样的属性(其实就是成员变量),Groovy会自动为它添加getXxyyzz和setXxyyzz两个函数,用于获取和设置xxyyzz属性值。如果闭包没定义参数的话,则隐含有一个参数,这个参数名字叫it,和this的作用类似。
	安装后的文件如上图所示,我们需要关注的是bin和doc文件夹下的内容,其它文件夹下是一些配置和groovy自带的一些jar包
	配置groovy环境变量
二、与Java的不同之处
1、默认 imports
所有这些包和类都是默认导入的,您不必使用显式import语句来使用它们:
1、Json处理
json的知识点一般分为两部分实体生成json字符串,json字符串转为实体。groovy为我们提供了api方便处理json,比java功能还要强大。其实我们没必要使用第三方库拉(Gson、fastGson)
1、实体生成json字符串
de...