使用Groovy操作文件

简介:

Java 读写文件比较麻烦,那 Groovy 操作文件又如何呢?

1. 读文件

读文件内容

在groovy中输出文件的内容:

println new File("tmp.csv").text  

上面代码非常简单,没有流的出现,没有资源关闭的出现,也没有异常控制的出现,所有的这些groovy已经搞定了。

读取每一行内容:

File file = new File('tmp.csv')
assert file.name == 'tmp.csv'
assert ! file.isAbsolute()
assert file.path == 'tmp.csv'
assert file.parent == null

//使用系统默认的编码处理文件流  
file.eachLine {println it }  
//指定处理流的编码
file.eachLine("UTF-8") { println it }

file.eachLine("UTF-8",10) {str,no->  
    println str  
    println no }

对文件中每一行的内容做处理:

file.splitEachLine("\t") { println it  }

//以大写行式输出文件内容  
lineList = file.readLines();  
liineList.each {  
  println it.toUpperCase();  
}

file.filterLine {String str->  
    if (str.contains('code'))  
        println str  
}.writeTo(new PrintWriter(System.out)) 

解析 xml 文件

<?xml version="1.0" encoding="UTF-8"?> 
<customers> 
  <corporate> 
    <customer name="bill gates" company="microsoft"></customer> 
    <customer name="steve jobs" company="apple"></customer> 
    <customer name="bill dyh" company="sun"></customer> 
  </corporate> 
  <consumer> 
    <customer name="jone Doe"></customer> 
    <customer name="jane Doe"></customer>    
  </consumer> 
</customers>
def customers = new XmlSlurper().parse(new File("customers.xml")) 
/*对文件进行解析*/ 
for(customer in customers.corporate.customer){ 
    println "${customer.@name} works for${customer.@company}"; 
} 

解析 propeties 文件

参考 groovy: How to access to properties file?,代码如下:

def props = new Properties()
new File("message.properties").withInputStream { 
  stream -> props.load(stream) 
}
// accessing the property from Properties object using Groovy's map notation
println "capacity.created=" + props["capacity.created"]

def config = new ConfigSlurper().parse(props)
// accessing the property from ConfigSlurper object using GPath expression
println "capacity.created=" + config.capacity.created

另外一种方式:

def config = new ConfigSlurper().parse(new File("message.groovy").toURL())

message.groovy 内容如下:

capacity {
  created="x"
  modified="y"
}

2. 操作目录

列出目录所有文件(包含子文件夹,子文件夹内文件) :

def dir = new File(dirName)  
if (dir.isDirectory()) {  
    dir.eachFileRecurse { file ->  
        println file  
    }  
} 

dir.eachFileMatch(~/.*\.txt/) {File it-> println it.name  } //使正则表达式匹配文件名  
dir.eachFileMatch(FILES, ~/.*\.txt/) { File it-> println it.name  }   

3. 写文件

import java.io.File  
  
def writeFile(fileName) {  
    def file = new File(fileName)  
      
    if (file.exists())   
        file.delete()  
          
    def printWriter = file.newPrintWriter() //   
      
    printWriter.write('The first content of file')  
    printWriter.write('\n')  
    printWriter.write('The first content of file')  
      
    printWriter.flush()  
    printWriter.close()  
}  

除了 file.newPrintWriter() 可以得到一个 PrintWriter,类似方法还有 file.newInputStream() file.newObjectInputStream()等。

更简洁写法:

new File(fileName).withPrintWriter { printWriter ->  
     printWriter.println('The first content of file')  
}  
目录
相关文章
|
6月前
|
存储 缓存 Java
Java 文件 & 文件操作
Java 文件 & 文件操作
|
6月前
|
存储 Java Unix
【JavaEE初阶】 认识文件与Java中操作文件
【JavaEE初阶】 认识文件与Java中操作文件
|
6月前
|
存储 Java Linux
【JavaEE】文件操作
【JavaEE】文件操作
|
存储 Java Unix
Java7操作文件和文件夹的新特性
Path接口和Files类是在JavaSE7中新添加进来的。比File类要方便的多。
99 0
C#编程-110:文件操作File静态类
C#编程-110:文件操作File静态类
124 0
C#编程-110:文件操作File静态类
|
Java
【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
516 0
【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
|
Java API Apache
Java - 使用 FileUtils 简化文件操作
Java - 使用 FileUtils 简化文件操作
349 0
【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 )
【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 )
310 0