我正在开发应用程序,我必须将.zip文件夹转换为字节数组,我正在使用Scala和Play框架。
截至目前我正在使用,
val byteOfArray = Source.fromFile("resultZip.zip", "UTF-8").map(_.toByte).toArray
但是当我使用byteOfArray执行操作时,我收到了错误。
我打印了byteOfArray,结果如下所示
空解析器
请告诉我这是将.zip转换为字节数组的正确方法吗?
另请告诉我是否有另一种转换字节数组的好方法。
答案 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文件作为字节数组。如果您需要在进一步处理中使用文件名和/或路径等,请修改以尝试。