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 中文本文件的所有行。Groovy 的 File 类中内置了eachLine方法,目的是确保读取文本文件的每一行。

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 类的删除函数。以下示例展示了如何完成此操作。

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 及其子目录中的所有文件(如果存在)。