使用Scala 优化以下代码 def copyDirectory(source: File, destination: File): Unit = { if (source.isDirectory) { if (!destination.exists()) { destination.mkdir() } val files = source.listFiles() for (f <- files) { val newFile = new File(destination.getAbsolutePath + File.separator + f.getName) copyDirectory(f, newFile) } } else { val in = new FileInputStream(source) val out = new FileOutputStream(destination) val buffer = new Array[Byte](1024) var length = in.read(buffer) while (length > 0) { out.write(buffer, 0, length) length = in.read(buffer) } in.close() out.close() } }
时间: 2024-01-02 18:05:22 浏览: 125
以下是对 `copyDirectory` 方法进行优化的示例代码:
```scala
import java.io._
object FileCopy {
def main(args: Array[String]): Unit = {
val source = new File("path/to/source/directory")
val destination = new File("path/to/destination/directory")
copyDirectory(source, destination)
}
def copyDirectory(source: File, destination: File): Unit = {
if (!source.exists()) {
return
}
if (source.isDirectory) {
if (!destination.exists()) {
destination.mkdir()
}
val files = Option(source.listFiles()).getOrElse(Array.empty[File])
for (f <- files) {
val newFile = new File(destination, f.getName)
copyDirectory(f, newFile)
}
} else {
val in = new FileInputStream(source)
val out = new FileOutputStream(destination)
try {
val buffer = new Array[Byte](4096)
var bytesRead = in.read(buffer)
while (bytesRead != -1) {
out.write(buffer, 0, bytesRead)
bytesRead = in.read(buffer)
}
} finally {
in.close()
out.close()
}
}
}
}
```
在上述代码中,我们首先添加了一个条件判断,如果源文件或目录不存在,则直接返回。接着,我们使用 `Option` 对 `source.listFiles()` 方法的返回值进行了安全处理,如果为空则返回一个空数组。这样可以避免在遍历文件时出现空指针异常。另外,我们使用了 `File` 的构造函数来创建新文件对象,而不是使用字符串拼接的方式。这样可以提高代码的可读性。
在文件复制的部分,我们使用了 try-finally 语句块来确保输入和输出流都能被正确地关闭。此外,我们将缓冲区的大小增加到了 4096 字节,这样可以提高文件复制的效率。
阅读全文