Scala 文件 I-O


Scala 文件 I/O

Scala提供了许多用于文件I/O的API,可以读取、写入、复制等各种操作文件。使用Scala文件I/O,您需要使用Java的File类和库,并添加一些Scala特有的语法。

读取文件

在Scala中,有许多读取文件的方法,其中最常见的是使用Source类和Java的BufferedReader类。以下是使用这两种方法读取文件的示例:

import scala.io.Source
import java.io.BufferedReader
import java.io.FileReader

//使用Source类读取文件
val fileName = "/path/to/your/file"
val fileContent = Source.fromFile(fileName).getLines.mkString("\n")

//使用BufferedReader类读取文件
val fileReader = new BufferedReader(new FileReader(fileName))
val buffer = collection.mutable.ArrayBuffer[String]()
var line: String = null
while ({line = fileReader.readLine(); line != null}) {
  buffer.append(line)
}
val fileContent = buffer.mkString("\n")

写文件

Scala文件I/O允许使用Java的FileWriter类和PrintWriter类来写入文件。以下是使用这两种方法写入文件的示例:

import java.io.{FileWriter,PrintWriter}

val fileName = "/path/to/your/file"
val fileWriter = new FileWriter(fileName)
val printWriter = new PrintWriter(fileWriter)
printWriter.println("Hello")
printWriter.close()

复制文件

要在Scala中复制文件,您可以使用Java的InputStream和OutputStream类和库。以下是使用这两种方法复制文件的示例:

import java.io.{File, FileInputStream, FileOutputStream, IOException}

//复制单个文件
def copyFile(source: File, dest: File) {
  val inputStream = new FileInputStream(source)
  val outputStream = new FileOutputStream(dest)
  val buffer = new Array[Byte](1024)
  var length = 0
  while ({ length = inputStream.read(buffer); length > 0 }) {
    outputStream.write(buffer, 0, length)
  }
  inputStream.close()
  outputStream.close()
}

//复制目录
def copyDirectory(source: File, dest: File) {
  if (source.isDirectory()) {
    if (!dest.exists()) {
      dest.mkdir()
    }
    val files = source.list()
    for (file <- files) {
      val srcFile = new File(source, file)
      val destFile = new File(dest, file)
      copyDirectory(srcFile, destFile)
    }
  } else {
    copyFile(source, dest)
  }
}

综合示例

以下是一个综合示例,演示了如何读取文件并写入另一个文件:

import scala.io.Source
import java.io.{File,FileWriter,IOException,PrintWriter}

val inputFileName = "/path/to/your/input/file"
val outputFileName = "/path/to/your/output/file"
val fileContent = Source.fromFile(inputFileName).getLines.mkString("\n")
val outputFile = new File(outputFileName)
val printWriter = new PrintWriter(new FileWriter(outputFile))
printWriter.write(fileContent)
printWriter.close()

总结

在Scala中,使用Java的File类和库,可以进行文件I/O操作,支持读取、写入、复制等。Scala特有的语法可以使文件操作更加简单和容易。