如何在Scala中将文件读取为字节数组

我可以find大量的例子,但他们似乎主要依赖Java库或只读字符/行/等。

我只是想读一些文件,并与scala库获得一个字节数组 – 有人可以帮我吗?

Java 7:

import java.nio.file.{Files, Paths} val byteArray = Files.readAllBytes(Paths.get("/path/to/file")) 

我相信这是最简单的方法。 只是在这里利用现有的工具。 NIO.2真是太棒了。

这应该工作(斯卡拉2.8):

 val bis = new BufferedInputStream(new FileInputStream(fileName)) val bArray = Stream.continually(bis.read).takeWhile(-1 !=).map(_.toByte).toArray 
 val is = new FileInputStream(fileName) val cnt = is.available val bytes = Array.ofDim[Byte](cnt) is.read(bytes) is.close() 

库scala.io.Source有问题,请不要在读取二进制文件时使用它。

错误可以按照这里的指示复制: https : //github.com/liufengyun/scala-bug

在文件data.bin ,它包含hex0xea ,它是二进制的11101010 ,应该被转换为十进制的234

main.scala文件包含两种读取文件的方法:

 import scala.io._ import java.io._ object Main { def main(args: Array[String]) { val ss = Source.fromFile("data.bin") println("Scala:" + ss.next.toInt) ss.close val bis = new BufferedInputStream(new FileInputStream("data.bin")) println("Java:" + bis.read) bis.close } } 

当我运行scala main.scala ,程序输出如下:

 Scala:205 Java:234 

Java库生成正确的输出,而Scala库不是。

你也可以考虑使用scalax.io :

 scalax.io.Resource.fromFile(fileName).byteArray 

您可以使用Apache Commons Compress IOUtils

 val file = new File("") IOUtils.toByteArray(new FileInputStream(file))