读取行期间Source.fromInputStream异常处理

时间:2013-04-05 23:57:02

标签: scala file-io exception-handling iterator inputstream

我创建了一个函数,我将输入流作为参数并返回由字符串组成的迭代器。我完成如下:

def lineEntry(fileInputStream:InputStream):Iterator[String] = {
   Source.fromInputStream(fileInputStream).getLines()
}

我使用如下方法:

val fStream = getSomeInputStreamFromSource()
lineEntry(fStream).foreach{
  processTheLine(_)
}

现在很有可能方法lineEntry在使用foreach迭代输入流时遇到坏字符时可能会爆炸。

有什么方法可以解决这种情况?

1 个答案:

答案 0 :(得分:4)

快速解决方案(适用于Scala 2.10):

def lineEntry(fileInputStream:InputStream):Iterator[String] = {
  implicit val codec = Codec.UTF8 // or any other you like
  codec.onMalformedInput(CodingErrorAction.IGNORE)

  Source.fromInputStream(fileInputStream).getLines()
}

在Scala 2.9中,存在一些小差异:

implicit val codec = Codec(Codec.UTF8)

Codec还有一些配置选项,您可以在这些情况下调整其行为。