我想从Scala中的CSV文件中获取第一行,如何在不使用getLine(0)的情况下进行此操作(不推荐使用)?
zig*_*tar 11
如果您在使用后不关心释放文件资源,以下是一种非常方便的方式:
Source.fromFile("myfile.csv").getLines.next()
Rex*_*err 10
如果要关闭文件,并且想要获取空集合而不是在文件实际为空时抛出错误,那么
val myLine = {
val src = Source.fromFile("myfile.csv")
val line = src.getLines.take(1).toList
src.close
line
}
Run Code Online (Sandbox Code Playgroud)
如果你限制自己使用标准库,那么你可以做到最短的方式.
FWIW,这就是我要做的事情(坚持使用标准库):
def firstLine(f: java.io.File): Option[String] = {
val src = io.Source.fromFile(f)
try {
src.getLines.find(_ => true)
} finally {
src.close()
}
}
Run Code Online (Sandbox Code Playgroud)
注意事项:
Option[String]而不是List[String],因为它总是返回一个或没有.这更像是惯用的Scala.src关好,即使是在非常起飞的机会,你可以打开该文件,但看完抛出一个异常.find(_ => true)获取第一项Iterator不会让我感觉很好,但是没有nextOption方法,这比转换为List不使用的中间件更好.IOException打开或读取文件传递.我还建议使用scala-arm库为您提供更好的API来管理资源并在需要时自动关闭文件.
import resource._
def firstLine(f: java.io.File): Option[String] = {
managed(io.Source.fromFile(f)) acquireAndGet { src =>
src.getLines.find(_ => true)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9872 次 |
| 最近记录: |