读取文件
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 }