1. eachLine -- 打开和读取文件的每一行

new File("foo.txt").eachLine {
println it.toUpperCase();
}

2. readLines -- 其作用基本与 eachLine 相同,但它不接受闭包为参数,而是把文件行读到一个 List 中

lineList = new File("foo.txt").readLines();
lineList.each {
println it.toUpperCase();
}

3. splitEachLine -- 读取文件的每一行,然后对行以指定分隔符分割成数组。不用再多说了,这个方法对处理 CSV 文件那可是相当的高效。

lineList = new File("foo.csv").splitEachLine(",") {
println "name=${it[0]} balance=${it[1]}";
}

4. eachByte -- 处理二进制文件,以字节级访问文件,这个方法相当于 eachLine() 方法。

new File("foo.bin").eachByte { print it; }

5. readBytes -- 自然,处理二进制文件,以字节级访问文件,这个方法相当于 readLines() 方法了

byteList = new File("foo.bin").readBytes();
byteList.each {
println it;
}

6. write -- Groovy 用这个方法写文件真是太直观了

new File("foo.txt").write("testing testing");

new File("foo.txt").write("""
This is
just a test file
to play with
""");

以上使用了三重引用语法,其中的文本保留格式的写入到文件中。注意上面写法在文件首尾都会有一个空行,除非起始和结束字符都要紧贴 """;还有上面方法写的文件用词本打开会是挤在一行,用 editplus 打开是多行,因为它采用的是 linux 下的 /n 换行,而不是 windows 下的 /r/n 换行。、

7. append -- 与 write 覆写文件不同,append 是在文件后追加内容

new File("foo.txt").append("""/
This is
just a test file
to play withff
"""
);

8. eachFile -- 功能上类似 java.io.File 的 listFiles() 方法。用来列举路径中的每个文件(包括目录),传给闭包处理

new File(".").eachFile {   //这里的 File 表示的是一个路径
println it.getName(); //eachFile() 列出的每一项是一个 File 实例
}

9. eachFileRecurse -- 以深度优先的方式递归遍历路径,列出文件(包括目录),传给闭包处理

new File(".").eachFileRecurse {   //这里的 File 表示的是一个路径
println it.getPath(); //eachFile() 列出的每一项是一个 File 实例
}

10. …… 再重复一下,其他 Groovy 对 java.io.File 的扩展方法请参考 http://groovy.codehaus.org/groovy-jdk/java/io/File.html

eachDir()、eachDirMatch()、eachDirRecurse()、eachFileMatch()、filterLine()、
newInputStream()、newOutputStream()、newReader()、newPrintWriter()、
withInputStream()、withOutputStream()、withReader()、withPrintWriter()
等等。还要留意一下有一些方法是可以指定字符集的。

----

操作目录

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

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 }
 

写文件

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')
}

解析 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"
}

Groovy读取文件信息的更多相关文章

  1. linux 读取文件信息并且输出

    版权为个人所有,欢迎转载如转载请说明出处.(东北大亨) http://www.cnblogs.com/northeastTycoon/p/5513231.html 以下为读取文件信息做输出操作. 1. ...

  2. HTML5的File API读取文件信息

    html结构: <div id="fileImage"></div> <input type="file" value=" ...

  3. .net上传文件,利用npoi读取文件信息到datatable里

    整理代码,.net上传文件,利用npoi读取文件到datatable里,使用了FileUpload控件,代码如下: protected void Button1_Click(object sender ...

  4. pytest 9 pytest-datadir读取文件信息

    安装:pip install pytest-datadir 介绍:用于操作测试数据目录和文件的插件.pytest-datadir他会寻找包含测试模块名字的文件夹或者全局的一个文件夹名字为data下的数 ...

  5. 读取文件信息,并通过sscanf从中获取所需数据

    #include <stdio.h> #include <stdlib.h> #include <string.h> int file_length(char* f ...

  6. python读取文件内的IP信息 练习

    代码如下: #导包 import fileinput import re def readArw(): for line in fileinput.input(r"G:/raw.txt&qu ...

  7. Servlet读取文件的最好的方式

    在java web 开发的时候不可避免的会读取文本信息,但是方式不同,所付出的代价也是不一样的,今天学到了一个比较好的实用性的技巧,拿来与大家分享一下. 读取属性配置文件 之所以说成是读取属性(pro ...

  8. 使用QFileInfo类获取文件信息(在NTFS文件系统上,出于性能考虑,文件的所有权和权限检查在默认情况下是被禁用的,通过qt_ntfs_permission_lookup开启和操作。absolutePath()必须查询文件系统。而path()函数,可以直接作用于文件名本身,所以,path() 函数的运行会更快)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/65444966QFileInfo类为我们提供了系统无 ...

  9. QT_8_Qt中的事件处理_定时器事件_定时器类_事件分发器_事件过滤器_绘图事件_高级绘图事件_绘图设备_QFile 文件读写_QFileInfo文件信息

    Qt中的事件处理 1.1. 捕获QLabel中是鼠标事件 1.2. enterevent 鼠标进入 1.3. leaveevent 鼠标离开 1.4. 鼠标按下MyLabel::mousePressE ...

随机推荐

  1. RabbitMQ 知识总结

    RabbitMQ知识总结 AMQP协议 AMQP协议是一个提供统一消息服务的应用层标准协议,并不会受到客户端/中间件不同产品.不同开发语言等条件的影响.RabbitMQ则是基于该协议实现的. 举个例子 ...

  2. spring 的单例模式

    singleton---单例模式 单例模式,在spring 中其实是scope(作用范围)参数的缺省设定值每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例 单例模式分为饿汉模 ...

  3. (转)java提高篇(四)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  4. python中数字类型与处理工具

    python中的数字类型工具 python中为更高级的工作提供很多高级数字编程支持和对象,其中数字类型的完整工具包括: 1.整数与浮点型, 2.复数, 3.固定精度十进制数, 4.有理分数, 5.集合 ...

  5. Java工程师书单(初级、中级、高级)

    简介 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序员经常会问到的问题 ...

  6. SSE再学习:灵活运用SIMD指令6倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由180ms降低到30ms)。

    这半年多时间,基本都在折腾一些基本的优化,有很多都是十几年前的技术了,从随大流的角度来考虑,研究这些东西在很多人看来是浪费时间了,即不能赚钱,也对工作能力提升无啥帮助.可我觉得人类所谓的幸福,可以分为 ...

  7. C++ STL vector详解

    一.解释:  vector(向量):是一种顺序容器,事实上和数组差不多,但它比数组更优越.一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界.而vector正好弥补了这个缺陷,它 ...

  8. nodejs-基础

    01-nodejs介绍 1.什么是nodejs 1.(javascript跑在机器端,服务端)Javascript on the machine 2.(跑在谷歌v8引擎上)A runtime for ...

  9. struts2增删改查---layer---iframe层

    在这里写一下struts2中的简单的增删改查 struts.xml中的配置 <?xml version="1.0" encoding="UTF-8" ?& ...

  10. Vue实例对象的数据选项

    前面的话 一般地,当模板内容较简单时,使用data选项配合表达式即可.涉及到复杂逻辑时,则需要用到methods.computed.watch等方法.本文将详细介绍Vue实例对象的数据选项 data ...