读取文件
class test{
static void main(String[] args){
def file = new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy\\user.txt");
file .eachLine {
// 声明文件内的文本属性名叫lines,然后用$符号可以使用,输出里面的内容
lines -> println "$lines"
}
// 不能在{}格式里写代码,需要声明变量后,再用来使用
def lineFiles = file.readLines();
lineFiles.each {
println it.toLowerCase()
}
// 读取每一行,分割文本,CSV文件分割很好用
def eachFile = file.splitEachLine(":") {
println "类型=${it[0]} 内容=${it[1]}"
}
// 处理二进制文件,以字节访问文件,和这个方法一样eachLine
file.eachByte {
print it;
}
new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy").eachFile {
// 获取目录下的文件名
println it.getName()
// 获取文件里的文本,不能直接读取Excel文件
// println it.getText('utf-8')
}
// 遍历路径下的所有文件,忽略不是文件夹
def file2 = new File("C:\\Users\\12134\\Desktop\\个人进阶之旅")
file2.eachDir {
println(it.getName())
}
def dir = new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy")
if (dir.isDirectory()) {
dir.eachFileMatch(~/.*\.txt/) { File it -> println it.name } //使正则表达式匹配文件名
}
// 遍历所路径下的子文件目录
file2.eachDirRecurse {
directory -> println directory
}
// 递归地将目录大小计算为其所有文件的总大小。
long fileSize = file2.directorySize();
println(fileSize)
/**
* FileType有三种类型
* FILES:文件,不包括文件夹
* DIRECTORIES:文件夹
* ANY:包括此目录下的文件夹、文件
* eachFileRecurse:读取此目录和任何子目录中的每个后代文件。
*/
file2.eachFileRecurse(FileType.FILES, {
// 局部变量
directory -> println directory
})
def baseDir = "C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy"
try {
new File(baseDir, 'AB_12.txt').eachLine {
// 错误写法,读取不了文件内容
//line -> println(line.text)
line -> println(line)
}
} catch (any) {
}
}
}
写入文件
// 第一种方式
def file = new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy\\user.txt");
println file.text
// writer 直接写入文本,会覆盖文件
file.withWriter('utf-8') {
writer -> writer.writeLine 'Hello World'
}
// 第二种方式
// 直接调用写入方法
file.write('abc')
//第三种方式
// 更加简便的写法
file << '''Into the ancient pond
A frog jumps
Water’s sound!'''
//第四种方式
// append方法追加文本内容
file.append("名字:李先生\n" + "年龄:21")
file.eachLine {
// 文本转换为大写
println it.toUpperCase()
}
其他处理
// 文件内容各行存放到list
def list = new File(baseDir, 'AB_12.txt').collect { it }
list.each {
println it
}
new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy").traverse { list2 ->
//如果当前文件是一个目录且名字是mybat,则停止遍历
if (file2.directory && file2.name == '个人进阶之旅') {
//否则打印文件名字并继续
println "mybat" + file2.name
} else {
println file2.name
}
}
String message = 'Hello from Groovy'
// 序列化数据到文件
file.withDataOutputStream { out ->
out.writeBoolean(true)
out.writeUTF(message)
}
// 从文件读取数据并反序列化
file.withDataInputStream { input ->
assert input.readBoolean() == true
assert input.readUTF() == message
}
// User类实现了Serializable接口
User p = new User()
p.setName('Bob')
// 序列化对象到文件
file.withObjectOutputStream { out ->
out.writeObject(p)
}
// 从文件读取数据进行反序列化
file.withObjectInputStream { input ->
def p2 = input.readObject()
assert p2.name == p.name
assert p2.age == p.age
}