Groovy - 文件 I/O
在处理 I/O 时,Groovy 提供了许多帮助方法。 Groovy 提供了更简单的类来为文件提供以下功能。
- 读取文件
- 写入文件
- 遍历文件树
- 读取数据对象并将其写入文件
除此之外,您始终可以使用下面列出的普通 Java 类进行文件 I/O 操作。
- java.io.File
- java.io.InputStream
- java.io.OutputStream
- java.io.Reader
- java.io.Writer
读取文件
以下示例将在 Groovy 中输出文本文件的所有行。 eachLine 方法内置在 Groovy 的 File 类中,目的是确保读取文本文件的每一行。
import java.io.File
class Example {
static void main(String[] args) {
new File("E:/Example.txt").eachLine {
line -> println "line : $line";
}
}
}
File 类用于实例化一个以文件名为参数的新对象。 然后它获取 eachLine 的函数,将其放入名为 line 的变量中并相应地打印出来。
如果文件包含以下行,它们将被打印出来。
line : Example1 line : Example2
将文件的内容作为整个字符串读取
如果你想以字符串的形式获取文件的全部内容,可以使用文件类的 text 属性。 以下示例显示了如何做到这一点。
class Example {
static void main(String[] args) {
File file = new File("E:/Example.txt")
println file.text
}
}
如果文件包含以下行,它们将被打印出来。
line : Example1 line : Example2
写入文件
如果要写入文件,则需要使用 writer 类将文本输出到文件。 以下示例显示了如何做到这一点。
import java.io.File
class Example {
static void main(String[] args) {
new File('E:/','Example.txt').withWriter('utf-8') {
writer -> writer.writeLine 'Hello World'
}
}
}
如果您打开文件 Example.txt,您将看到"Hello World"字样打印到文件中。
获取文件的大小
如果要获取文件的大小,可以使用文件类的长度属性来获取文件的大小。 以下示例显示了如何做到这一点。
class Example {
static void main(String[] args) {
File file = new File("E:/Example.txt")
println "The file ${file.absolutePath} has ${file.length()} bytes"
}
}
上面的代码会以字节为单位显示文件的大小。
测试文件是否为目录
如果要查看路径是文件还是目录,可以使用 File 类的 isFile 和 isDirectory 选项。 以下示例显示了如何做到这一点。
class Example {
static void main(String[] args) {
def file = new File('E:/')
println "File? ${file.isFile()}"
println "Directory? ${file.isDirectory()}"
}
}
上面的代码将显示以下输出 −
File? false Directory? True
创建目录
如果你想创建一个新目录,你可以使用 File 类的 mkdir 函数。 以下示例显示了如何做到这一点。
class Example {
static void main(String[] args) {
def file = new File('E:/Directory')
file.mkdir()
}
}
如果目录 E:\Directory 不存在,则会创建它。
删除文件
如果要删除文件,可以使用 File 类的删除功能。 以下示例显示了如何做到这一点。
class Example {
static void main(String[] args) {
def file = new File('E:/Example.txt')
file.delete()
}
}
如果文件存在,将被删除。
复制文件
Groovy 还提供将内容从一个文件复制到另一个文件的功能。 以下示例显示了如何做到这一点。
class Example {
static void main(String[] args) {
def src = new File("E:/Example.txt")
def dst = new File("E:/Example1.txt")
dst << src.text
}
}
将创建文件 Example1.txt,并将文件 Example.txt 的所有内容复制到此文件中。
获取目录内容
Groovy 还提供列出驱动器和驱动器中文件的功能。
以下示例显示了如何使用 File 类的 listRoots 函数显示机器上的驱动器。
class Example {
static void main(String[] args) {
def rootFiles = new File("test").listRoots()
rootFiles.each {
file -> println file.absolutePath
}
}
}
根据机器上可用的驱动器,输出可能会有所不同。 在标准机器上,输出将类似于以下输出 −
C:\ D:\
以下示例显示如何使用 File 类的 eachFile 函数列出特定目录中的文件。
class Example {
static void main(String[] args) {
new File("E:/Temp").eachFile() {
file->println file.getAbsolutePath()
}
}
}
输出将显示目录 E:\Temp 中的所有文件
如果要递归显示目录及其子目录中的所有文件,则可以使用 File 类的 eachFileRecurse 函数。 以下示例显示了如何做到这一点。
class Example {
static void main(String[] args) {
new File("E:/temp").eachFileRecurse() {
file -> println file.getAbsolutePath()
}
}
}
输出将显示目录 E:\Temp 及其子目录(如果存在)中的所有文件。

