如何使用Scala解压缩zip文件?

用户4659009

基本上,我需要解压缩一个.zip文件,其中包含一个名为modeled的文件夹,而该文件夹又包含许多excel文件。

我很幸运地找到了要解压缩zip文件的已编写的代码(ZipArchive),但是我不知道为什么在使用它时会引发错误消息。下面列出了ZipArchive的代码和错误消息:

import java.io.{OutputStream, InputStream, File, FileOutputStream}
import java.util.zip.{ZipEntry, ZipFile}
import scala.collection.JavaConversions._

object ZipArchive {

  val BUFSIZE = 4096
  val buffer = new Array[Byte](BUFSIZE)

  def unZip(source: String, targetFolder: String) = {
    val zipFile = new ZipFile(source)

    unzipAllFile(zipFile.entries.toList, getZipEntryInputStream(zipFile)_, new File(targetFolder))
  }

  def getZipEntryInputStream(zipFile: ZipFile)(entry: ZipEntry) = zipFile.getInputStream(entry)

  def unzipAllFile(entryList: List[ZipEntry], inputGetter: (ZipEntry) => InputStream, targetFolder: File): Boolean = {

    entryList match {
      case entry :: entries =>

        if (entry.isDirectory)
          new File(targetFolder, entry.getName).mkdirs
        else
          saveFile(inputGetter(entry), new FileOutputStream(new File(targetFolder, entry.getName)))

        unzipAllFile(entries, inputGetter, targetFolder)
      case _ =>
        true
    }
  }

  def saveFile(fis: InputStream, fos: OutputStream) = {
    writeToFile(bufferReader(fis)_, fos)
    fis.close
    fos.close
  }

  def bufferReader(fis: InputStream)(buffer: Array[Byte]) = (fis.read(buffer), buffer)

  def writeToFile(reader: (Array[Byte]) => Tuple2[Int, Array[Byte]], fos: OutputStream): Boolean = {
    val (length, data) = reader(buffer)
    if (length >= 0) {
      fos.write(data, 0, length)
      writeToFile(reader, fos)
    } else
      true
  }
}

错误信息:

java.io.FileNotFoundException: src/test/resources/oepTemp/modeled/EQ_US_2_NULL_('CA')_ALL_ELT_IL_EQ_US.xlsx (No such file or directory), took 6.406 sec
[error]     at java.io.FileOutputStream.open(Native Method)
[error]     at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
[error]     at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
[error]     at com.contract.testing.ZipArchive$.unzipAllFile(ZipArchive.scala:28)
[error]     at com.contract.testing.ZipArchive$.unZip(ZipArchive.scala:15)
[error]     at com.contract.testing.OepStepDefinitions$$anonfun$1.apply$mcZ$sp(OepStepDefinitions.scala:175)
[error]     at com.contract.testing.OepStepDefinitions$$anonfun$1.apply(OepStepDefinitions.scala:150)
[error]     at com.contract.testing.OepStepDefinitions$$anonfun$1.apply(OepStepDefinitions.scala:150)
[error]     at cucumber.api.scala.ScalaDsl$StepBody$$anonfun$apply$1.applyOrElse(ScalaDsl.scala:61)
[error]     at cucumber.api.scala.ScalaDsl$StepBody$$anonfun$apply$1.applyOrElse(ScalaDsl.scala:61)
[error]     at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
[error]     at cucumber.runtime.scala.ScalaStepDefinition.execute(ScalaStepDefinition.scala:71)
[error]     at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
[error]     at cucumber.runtime.Runtime.runStep(Runtime.java:298)
[error]     at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
[error]     at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
[error]     at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:48)
[error]     at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)
[error]     at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)
[error]     at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)
[error]     ...

因此,基于错误消息,它似乎正在尝试查找导出的Excel文件?这部分完全让我失望。任何帮助将不胜感激。我在下面添加了如何调用该方法的信息,也许我在做一些愚蠢的事情。如果可以推荐的话,我也愿意使用其他方式来提取我的zip文件。

val tempDirectoryDir = "src/test/resources/oepTemp/"
ZipArchive.unZip(tempDirectoryDir + "Sub Region Input - Output.zip", tempDirectoryDir)
que鱼

好吧,因为正在使用来自Java的某些实用程序,所以这是基于this的版本,已翻译为scala,也许它应该更实用,但是它很有用

package zip

import java.io.{ IOException, FileOutputStream, FileInputStream, File }
import java.util.zip.{ ZipEntry, ZipInputStream }

/**
 * Created by anquegi on 04/06/15.
 */
object Unzip extends App {

  val INPUT_ZIP_FILE: String = "src/main/resources/my-zip.zip";
  val OUTPUT_FOLDER: String = "src/main/resources/my-zip";

  def unZipIt(zipFile: String, outputFolder: String): Unit = {

    val buffer = new Array[Byte](1024)

    try {

      //output directory
      val folder = new File(OUTPUT_FOLDER);
      if (!folder.exists()) {
        folder.mkdir();
      }

      //zip file content
      val zis: ZipInputStream = new ZipInputStream(new FileInputStream(zipFile));
      //get the zipped file list entry
      var ze: ZipEntry = zis.getNextEntry();

      while (ze != null) {

        val fileName = ze.getName();
        val newFile = new File(outputFolder + File.separator + fileName);

        System.out.println("file unzip : " + newFile.getAbsoluteFile());

        //create folders
        new File(newFile.getParent()).mkdirs();

        val fos = new FileOutputStream(newFile);

        var len: Int = zis.read(buffer);

        while (len > 0) {

          fos.write(buffer, 0, len)
          len = zis.read(buffer)
        }

        fos.close()
        ze = zis.getNextEntry()
      }

      zis.closeEntry()
      zis.close()

    } catch {
      case e: IOException => println("exception caught: " + e.getMessage)
    }

  }

  Unzip.unZipIt(INPUT_ZIP_FILE, OUTPUT_FOLDER)

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用VBscript解压缩多个zip文件夹?

来自分类Dev

如何使用C#解压缩MSZIP文件?

来自分类Dev

如何使用各种技术解压缩/解压压缩/归档的文件-zip,rar,gzip,tar

来自分类Dev

如何使用Ant解压缩和复制特定文件

来自分类Dev

使用PHP下载后无法解压缩.zip文件

来自分类Dev

如何递归解压缩嵌套的ZIP文件?

来自分类Dev

如何通过7Zip使用Batch Script解压缩PASSWORD PROTECTED文件?

来自分类Dev

使用Swift解压缩zip文件

来自分类Dev

使用JAVA ZipFile类解压缩Zip文件

来自分类Dev

如何使用终端解压缩.tgz文件?

来自分类Dev

如何使用nodejs上传zip文件并解压缩?

来自分类Dev

在Mac OS X中,如何解压缩一个zip文件而不解压缩其内容?

来自分类Dev

如何使用终端解压缩受密码保护的.zip文件?

来自分类Dev

如何“解压缩” zip文件?

来自分类Dev

如何使用Java下载和解压缩ZIP文件

来自分类Dev

如何解压缩“ .zip”文件?

来自分类Dev

.NET 3.5如何使用DotNetZip将ZIP文件解压缩到指定位置

来自分类Dev

如何从终端解压缩zip文件?

来自分类Dev

.zip文件未解压缩

来自分类Dev

解压缩ZIP文件,然后解压缩所有子ZIP文件

来自分类Dev

解压缩前访问zip文件

来自分类Dev

如何使用Python读取zip文件内容而不解压缩(压缩格式)

来自分类Dev

无法解压缩zip文件

来自分类Dev

检查Zip文件的内容并解压缩

来自分类Dev

Windows:解压缩非.zip文件

来自分类Dev

使用JAVA ZipFile类解压缩Zip文件

来自分类Dev

如何使用 Java 解压缩目录中所有受密码保护的 zip 文件

来自分类Dev

如何解压缩多个 zip 文件夹

来自分类Dev

批处理如何使用 7zip 将多个 zip 文件解压缩到其原始文件夹?

Related 相关文章

热门标签

归档