scala - 如何使用 scala 将多个文件归档到 .zip 文件中?

标签 scala zipfile

任何人都可以发布一个简单的片段来做到这一点吗?

文件是文本文件,因此压缩会很好,而不仅仅是存档文件。

我将文件名存储在可迭代对象中。

最佳答案

目前没有任何方法可以从标准 Scala 库中执行此类操作,但它非常易于使用 java.util.zip :

def zip(out: String, files: Iterable[String]) = {
  import java.io.{ BufferedInputStream, FileInputStream, FileOutputStream }
  import java.util.zip.{ ZipEntry, ZipOutputStream }

  val zip = new ZipOutputStream(new FileOutputStream(out))

  files.foreach { name =>
    zip.putNextEntry(new ZipEntry(name))
    val in = new BufferedInputStream(new FileInputStream(name))
    var b = in.read()
    while (b > -1) {
      zip.write(b)
      b = in.read()
    }
    in.close()
    zip.closeEntry()
  }
  zip.close()
}

我在这里专注于简单而不是效率(没有错误检查并且一次读写一个字节并不理想),但它有效,并且可以很容易地改进。

关于scala - 如何使用 scala 将多个文件归档到 .zip 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985684/

相关文章:

python - 无法使用 python zipfile 库解压缩带有密码的 .zip 文件

jar - 正确解码 zip 条目文件名——CP437、UTF-8 还是?

scala - 无法压缩分区数不相等的 RDD。我可以使用什么来替代 zip?

scala - Scala 的 collection.mutable.PriorityQueue 线程安全吗?

macos - spark 提交 java.lang.ClassNotFoundException

java - 如何访问位于 ZipEntry 内的文件夹内的文件

scala - 过滤案例类对象属性的最佳实践

scala - Scala Slick如何将Scala代码转换为JDBC?

.net - System.IO.Compression.ZipFile .NET 4.5输出zip不适用于Linux/Mac/Java