Groovy - 文件 I/O

  • 简述

    Groovy 在处理 I/O 时提供了许多辅助方法。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”字样。
  • 获取文件的大小

    如果要获取文件的大小,可以使用文件类的 length 属性来获取文件的大小。以下示例显示了如何完成此操作。
    
    class Example {
       static void main(String[] args) {
          File file = new File("E:/Example.txt")
          println "The file ${file.absolutePath} has ${file.length()} bytes"
       } 
    }
    
    上面的代码将以字节为单位显示文件的大小。
  • 测试文件是否是目录

    如果要查看路径是文件还是目录,可以使用 File 类的isFileisDirectory选项。以下示例显示了如何完成此操作。
    
    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 类的 delete 函数。以下示例显示了如何完成此操作。
    
    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 及其子目录(如果存在)中的所有文件。