使用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')
}  
时间: 2024-11-18 11:16:28

使用Groovy操作文件的相关文章

关于PHP操作文件的一些FAQ总结

前言: PHP中对各类数据库的操作有着支持,对文件的操作也同样有着很丰富的操作方法,很多朋友现在的操作还是基于文件操作 可是有的时候在操作文件的时候还存在不少的困惑和疑点,以下是我在日常编写过程中碰到的以及坛上朋友所碰到的关于文件操 作的一些问题收藏吧. 问:如何新建一个文件? 答:1.使用fopen("要建立的文件名","参数"),参数可选 w,w+,a,a+ 2.使用exec("echo '' > 要建立的文件名");这样是使用系统方式

PHP操作文件问答

PHP操作文件问答前言: PHP中对各类数据库的操作有着支持,对文件的操作也同样有着很丰富的操作方法,很多朋友现在的操作还是基于文件操作可是有的时候在操作文件的时候还存在不少的困惑和疑点,以下是我在日常编写过程中碰到的以及坛上朋友所碰到的关于文件操作的一些问题收藏吧. 问:如何新建一个文件? 答:1.使用fopen("要建立的文件名","参数"),参数可选w,w+,a,a+ 2.使用exec("echo '' > 要建立的文件名");这样是

音乐开关和图像开关/请勿打挠开关操作文件admin/dontimg.asp

音乐开关和图像开关/请勿打挠开关操作文件admin/dontimg.asp<%Option Explicitdim room,user,dd,ai,chatdata,sendid,dispstr,dispstr2user=request.form("user")dd=request.form("dd")ai=request.form("ai")chatdata=application("chatdata")sendid=

在ASP.NET中操作文件的例子

asp.net  在ASP.NET中操作文件的例子 1.写文件writefile.aspx <%@ Import Namespace="System.IO" %> '引入所需的NameSpace<%Response.write("Writing the content into Text File in ASP.NET <BR>")Dim strwriterobj As StreamWriter '声明一个StreamWriter对象s

在ASP.NET中操作文件的例子(VB)

asp.net 在ASP.NET中操作文件的例子 1.写文件writefile.aspx <%@ Import Namespace="System.IO" %>        '引入所需的NameSpace<%Response.write("Writing the content into Text File in ASP.NET <BR>")Dim strwriterobj As StreamWriter         '声明一个S

Groovy脚本文件中的静态main方法

本文介绍Groovy中的静态main方法.先看如下代码: class Test1 { public Test1() { println "TEST1" } } class Test2 { public Test2() { println "TEST2" } static void main(args) { new Test1() } } 此代码不论用groovy命令行还是用groovyConsole来运行都要出错,好像是引用 groovy.lang.MissingM

在Python中操作文件之truncate()方法的使用教程

  这篇文章主要介绍了在Python中操作文件之truncate()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 truncate()方法截断该文件的大小.如果可选的尺寸参数存在,该文件被截断(最多)的大小. 大小默认为当前位置.当前文件位置不改变.注意,如果一个指定的大小超过了文件的当前大小,其结果是依赖于平台. 注意:此方法不会在当文件工作在只读模式打开. 语法 以下是truncate()方法的语法: ? 1 fileObject.truncate( [ size

Python中操作文件之write()方法的使用教程

  这篇文章主要介绍了Python中操作文件之write()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 write()方法把字符串str写入文件.没有返回值.由于缓冲,字符串可能不实际显示文件,直到flush()或close()方法被调用. 语法 以下是write()方法的语法: ? 1 fileObject.write( str ) 参数 str -- 这是要被写入的文件中的字符串. 返回值 此方法不返回任何值. 例子 下面的例子显示write()方法的使用. ?

在Python程序中操作文件之flush()方法的使用

  这篇文章主要介绍了在Python程序中操作文件之flush()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 flush()方法刷新内部缓冲区,像标准输入输出的fflush.这类似文件的对象,无操作. Python关闭时自动刷新文件.但是可能要关闭任何文件之前刷新数据. 语法 以下是flush()方法的语法: ? 1 fileObject.flush(); 参数 NA 返回值 此方法不返回任何值. 例子 下面的例子显示了flush()方法的使用. ? 1 2 3 4