使用Scala将Zip文件夹转换为字节数组

时间:2015-09-20 08:54:04

标签: java arrays scala playframework

我正在开发应用程序,我必须将.zip文件夹转换为字节数组,我正在使用Scala和Play框架。

截至目前我正在使用,

val byteOfArray = Source.fromFile("resultZip.zip", "UTF-8").map(_.toByte).toArray

但是当我使用byteOfArray执行操作时,我收到了错误。

我打印了byteOfArray,结果如下所示

  

空解析器

请告诉我这是将.zip转换为字节数组的正确方法吗?

另请告诉我是否有另一种转换字节数组的好方法。

1 个答案:

答案 0 :(得分:1)

您的解决方案不正确。 UTF-8是文本编码,zip文件是二进制文件。 zip文件是一个有效的UTF-8文件可能偶然发生,但即使在这种情况下,UTF-8也可以为单个字符使用多个字节,然后您将转换为单个字节。 Source仅用于处理文本文件(正如您可以从编码参数,Char类型使用等)中看到的那样。标准Scala库中没有任何内容可以使用二进制IO。

如果你真的讨厌使用Java标准库的想法(你不应该这样;那就是任何Scala解决方案将基于它,并且它不会比单个方法调用更简洁),使用{{ 3}}(未经测试,仅基于README示例):

import better.files._

val file = File("resultZip.zip")
file.bytes.toArray // if you really need an Array and can't work with Iterator

但是对于这个特定情况,它不是真正的胜利,你只需要添加一个额外的依赖。

  

我的意思是一个文件夹包含文件和另一个包含文件的文件夹

如果您的文件夹中包含.zip个文件,可能还有其他一些嵌套文件夹,您可以使用

获取所有这些文件
val zipFiles = File(directoryName).glob("**/*.zip")

然后

zipFiles.map(_.bytes.toArray)

会给你一个Seq[Array[Byte]]包含所有zip文件作为字节数组。如果您需要在进一步处理中使用文件名和/或路径等,请修改以尝试。