读取文件

  1. class test{
  2. static void main(String[] args){
  3. def file = new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy\\user.txt");
  4. file .eachLine {
  5. // 声明文件内的文本属性名叫lines,然后用$符号可以使用,输出里面的内容
  6. lines -> println "$lines"
  7. }
  8. // 不能在{}格式里写代码,需要声明变量后,再用来使用
  9. def lineFiles = file.readLines();
  10. lineFiles.each {
  11. println it.toLowerCase()
  12. }
  13. // 读取每一行,分割文本,CSV文件分割很好用
  14. def eachFile = file.splitEachLine(":") {
  15. println "类型=${it[0]} 内容=${it[1]}"
  16. }
  17. // 处理二进制文件,以字节访问文件,和这个方法一样eachLine
  18. file.eachByte {
  19. print it;
  20. }
  21. new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy").eachFile {
  22. // 获取目录下的文件名
  23. println it.getName()
  24. // 获取文件里的文本,不能直接读取Excel文件
  25. // println it.getText('utf-8')
  26. }
  27. // 遍历路径下的所有文件,忽略不是文件夹
  28. def file2 = new File("C:\\Users\\12134\\Desktop\\个人进阶之旅")
  29. file2.eachDir {
  30. println(it.getName())
  31. }
  32. def dir = new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy")
  33. if (dir.isDirectory()) {
  34. dir.eachFileMatch(~/.*\.txt/) { File it -> println it.name } //使正则表达式匹配文件名
  35. }
  36. // 遍历所路径下的子文件目录
  37. file2.eachDirRecurse {
  38. directory -> println directory
  39. }
  40. // 递归地将目录大小计算为其所有文件的总大小。
  41. long fileSize = file2.directorySize();
  42. println(fileSize)
  43. /**
  44. * FileType有三种类型
  45. * FILES:文件,不包括文件夹
  46. * DIRECTORIES:文件夹
  47. * ANY:包括此目录下的文件夹、文件
  48. * eachFileRecurse:读取此目录和任何子目录中的每个后代文件。
  49. */
  50. file2.eachFileRecurse(FileType.FILES, {
  51. // 局部变量
  52. directory -> println directory
  53. })
  54. def baseDir = "C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy"
  55. try {
  56. new File(baseDir, 'AB_12.txt').eachLine {
  57. // 错误写法,读取不了文件内容
  58. //line -> println(line.text)
  59. line -> println(line)
  60. }
  61. } catch (any) {
  62. }
  63. }
  64. }

写入文件

  1. // 第一种方式
  2. def file = new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy\\user.txt");
  3. println file.text
  4. // writer 直接写入文本,会覆盖文件
  5. file.withWriter('utf-8') {
  6. writer -> writer.writeLine 'Hello World'
  7. }
  8. // 第二种方式
  9. // 直接调用写入方法
  10. file.write('abc')
  11. //第三种方式
  12. // 更加简便的写法
  13. file << '''Into the ancient pond
  14. A frog jumps
  15. Water’s sound!'''
  16. //第四种方式
  17. // append方法追加文本内容
  18. file.append("名字:李先生\n" + "年龄:21")
  19. file.eachLine {
  20. // 文本转换为大写
  21. println it.toUpperCase()
  22. }

其他处理

  1. // 文件内容各行存放到list
  2. def list = new File(baseDir, 'AB_12.txt').collect { it }
  3. list.each {
  4. println it
  5. }
  6. new File("C:\\Users\\12134\\Desktop\\个人进阶之旅\\Groovy").traverse { list2 ->
  7. //如果当前文件是一个目录且名字是mybat,则停止遍历
  8. if (file2.directory && file2.name == '个人进阶之旅') {
  9. //否则打印文件名字并继续
  10. println "mybat" + file2.name
  11. } else {
  12. println file2.name
  13. }
  14. }
  15. String message = 'Hello from Groovy'
  16. // 序列化数据到文件
  17. file.withDataOutputStream { out ->
  18. out.writeBoolean(true)
  19. out.writeUTF(message)
  20. }
  21. // 从文件读取数据并反序列化
  22. file.withDataInputStream { input ->
  23. assert input.readBoolean() == true
  24. assert input.readUTF() == message
  25. }
  26. // User类实现了Serializable接口
  27. User p = new User()
  28. p.setName('Bob')
  29. // 序列化对象到文件
  30. file.withObjectOutputStream { out ->
  31. out.writeObject(p)
  32. }
  33. // 从文件读取数据进行反序列化
  34. file.withObjectInputStream { input ->
  35. def p2 = input.readObject()
  36. assert p2.name == p.name
  37. assert p2.age == p.age
  38. }