将多个(csv)zip文件内容合并为单个文件压缩

时间:2015-08-12 01:02:16

标签: java scala

我有大量(超过200)个压缩文件。所有文件都具有相同的结构(csv数据)。我需要通过附加所有文件的内容并压缩最终文件(total.zip)来创建单个csv文件(比如total.csv)。

目前,我解压缩每个文件并将内容附加到文本文件(total.csv),最后创建total.zip。

I am wondering if there is way to improve the process by appending the zip content ? 

顺便说一下,我是用Java做的。

1 个答案:

答案 0 :(得分:0)

基于对问题的评论,我决定为您提供一些代码:

import java.io._
import java.util.zip.{ZipEntry, ZipOutputStream, ZipFile}

import scala.collection.JavaConversions._

object Merger {

  implicit class StringFilePath(path: String) {
    def file = new File(path)
  }

  def merge(zips: Seq[File], out: File) = {
    val outArchive = new ZipOutputStream(new FileOutputStream(out))
    outArchive.putNextEntry(new ZipEntry("merged.csv"))

    zips.foreach({ zip =>
      val inArchive = new ZipFile(zip)

      try inArchive.entries().foreach(entry => {
        val in = new BufferedReader(new InputStreamReader(inArchive.getInputStream(entry)))
        in.lines()
          .iterator()
          .foreach(line => outArchive.write(s"$line\n".getBytes))
        in.close()
      })

      finally {
        inArchive.close()
      }
    })
    outArchive.close()
  }

  def main(args: Array[String]) = merge(Seq("zipcsv.zip".file, "zipcsv1.zip".file), "merged.zip".file)

}

代码是scala,但我认为很明显没有那么多" scalish"那边的代码,因为它只是处理文件。

希望它有所帮助。