java.util.zip.ZipInputStream Scala Examples
The following examples show how to use java.util.zip.ZipInputStream.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: ZipTests.scala From coursier with Apache License 2.0 | 5 votes |
package coursier.cli.util import java.io.{ByteArrayInputStream, ByteArrayOutputStream} import java.util.Random import java.util.zip.{Deflater, ZipEntry, ZipInputStream, ZipOutputStream} import coursier.launcher.internal.Zip import org.junit.runner.RunWith import org.scalatest.flatspec.AnyFlatSpec import org.scalatestplus.junit.JUnitRunner @RunWith(classOf[JUnitRunner]) class ZipTests extends AnyFlatSpec { "zipEntries" should "be fine with custom deflaters" in { // Inspired by https://github.com/spring-projects/spring-boot/commit/a50646b7cc3ad941e748dfb450077e3a73706205#diff-2297c301250b25e3b80301c58daf3ea0R621 val baos = new ByteArrayOutputStream val output = new ZipOutputStream(baos) { `def` = new Deflater(Deflater.NO_COMPRESSION, true) } val data = Array.ofDim[Byte](1024 * 1024) new Random().nextBytes(data) val entry = new ZipEntry("entry.dat") output.putNextEntry(entry) output.write(data) output.closeEntry() output.close() val result = baos.toByteArray val zos = new ZipOutputStream(new ByteArrayOutputStream) val entryNames = Zip.zipEntries(new ZipInputStream(new ByteArrayInputStream(result))) .map { case (ent, content) => println(ent.getCompressedSize) val name = ent.getName zos.putNextEntry(ent) zos.write(content) zos.closeEntry() name } .toVector zos.close() assert(entryNames == Vector("entry.dat")) } }
Example 2
Source File: IdeaMock.scala From sbt-idea-plugin with Apache License 2.0 | 5 votes |
package org.jetbrains.sbtidea.download.idea import java.net.{URI, URL} import java.nio.file.{Files, Path, Paths} import java.util.zip.{ZipEntry, ZipInputStream} import org.jetbrains.sbtidea.download.BuildInfo import org.jetbrains.sbtidea.packaging.artifact import org.jetbrains.sbtidea.{Keys, TmpDirUtils} import org.jetbrains.sbtidea.Keys._ import org.jetbrains.sbtidea.download.jbr.JbrDependency trait IdeaMock extends TmpDirUtils { protected val IDEA_VERSION = "192.5728.12" protected val IDEA_EDITION = "IU" protected val IDEA_DIST = s"idea$IDEA_EDITION-$IDEA_VERSION.zip" protected val IDEA_DIST_PATH = s"/org/jetbrains/sbtidea/download/$IDEA_DIST" protected val IDEA_BUILDINFO: BuildInfo = BuildInfo(IDEA_VERSION, Keys.IntelliJPlatform.IdeaUltimate, Some(JbrDependency.VERSION_AUTO)) protected val IDEA_DEP: IdeaDependency = IdeaDependency(IDEA_BUILDINFO) protected val IDEA_ART: IdeaDist = IdeaDistImpl(IDEA_DEP, new URL("file:")) protected val bundledPlugins: List[Keys.IntellijPlugin] = "org.jetbrains.plugins.yaml".toPlugin :: "com.intellij.properties".toPlugin :: Nil protected def installIdeaMock: Path = { val tmpDir = newTmpDir val installDir = Files.createDirectory(tmpDir.resolve(IDEA_VERSION)) val stream = getClass.getResourceAsStream(IDEA_DIST_PATH) artifact.using(new ZipInputStream(stream)) { zip => var entry: ZipEntry = zip.getNextEntry while (entry != null) { val toPath = installDir.resolve(entry.getName) if (entry.isDirectory) Files.createDirectory(toPath) else Files.copy(zip, toPath) entry = zip.getNextEntry } } installDir } protected def getDistCopy: Path = Files.copy(getIdeaDistMockPath, newTmpDir.resolve(IDEA_DIST)) protected def getIdeaDistMockURI: URI = getClass.getResource(IDEA_DIST_PATH).toURI protected def getIdeaDistMockPath: Path = Paths.get(getIdeaDistMockURI) }
Example 3
Source File: Unzip.scala From seahorse-workflow-executor with Apache License 2.0 | 5 votes |
package io.deepsense.workflowexecutor import java.io._ import java.util.zip.ZipInputStream import scala.reflect.io.Path import com.google.common.io.Files import io.deepsense.commons.utils.Logging object Unzip extends Logging { def unzipAll(inputFile: String): String = unzipToTmp(inputFile, _ => true) private def transferImpl(in: InputStream, out: OutputStream, close: Boolean): Unit = { try { val buffer = new Array[Byte](4096) def read(): Unit = { val byteCount = in.read(buffer) if (byteCount >= 0) { out.write(buffer, 0, byteCount) read() } } read() out.close() } finally { if (close) { in.close() } } } }
Example 4
Source File: UnzipHelper.scala From data-weave-native with Apache License 2.0 | 5 votes |
package org.mule.weave.dwnative.utils import java.io.File import java.io.FileOutputStream import java.io.IOException import java.io.InputStream import java.util.zip.ZipEntry import java.util.zip.ZipInputStream object UnzipHelper { def unZipIt(zipFile: InputStream, outputFolder: File): Unit = { val buffer = new Array[Byte](1024) try { //output directory val folder: File = outputFolder; if (!folder.exists()) { folder.mkdirs() } //zip file content val zis: ZipInputStream = new ZipInputStream(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); //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) } } }
Example 5
Source File: ArchiveUtils.scala From dl4scala with MIT License | 5 votes |
package org.dl4scala.util import org.slf4j.LoggerFactory import org.apache.commons.compress.archivers.tar.TarArchiveEntry import org.apache.commons.compress.archivers.tar.TarArchiveInputStream import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream import org.apache.commons.io.FileUtils import org.apache.commons.io.IOUtils import java.io._ import java.util.zip.GZIPInputStream import java.util.zip.ZipInputStream tarIn.close() } else if (file.endsWith(".gz")) { val is2 = new GZIPInputStream(fin) val extracted = new File(target.getParent, target.getName.replace(".gz", "")) if (extracted.exists) extracted.delete extracted.createNewFile val fos = FileUtils.openOutputStream(extracted) IOUtils.copyLarge(is2, fos) is2.close() fos.flush() fos.close() } target.delete } }
Example 6
Source File: Unzip.scala From seahorse with Apache License 2.0 | 5 votes |
package ai.deepsense.workflowexecutor import java.io._ import java.util.zip.ZipInputStream import scala.reflect.io.Path import com.google.common.io.Files import ai.deepsense.commons.utils.Logging object Unzip extends Logging { def unzipAll(inputFile: String): String = unzipToTmp(inputFile, _ => true) private def transferImpl(in: InputStream, out: OutputStream, close: Boolean): Unit = { try { val buffer = new Array[Byte](4096) def read(): Unit = { val byteCount = in.read(buffer) if (byteCount >= 0) { out.write(buffer, 0, byteCount) read() } } read() out.close() } finally { if (close) { in.close() } } } }
Example 7
Source File: Using.scala From Argus-SAF with Apache License 2.0 | 5 votes |
package org.argus.jawa.core.compiler.compile.io import java.io.{Closeable, FileInputStream, FileOutputStream, InputStream, OutputStream, File => JavaFile} import java.io.{BufferedInputStream, BufferedOutputStream, InputStreamReader, OutputStreamWriter} import java.io.{BufferedReader, BufferedWriter} import java.util.zip.GZIPInputStream import java.net.URL import java.nio.channels.FileChannel import java.nio.charset.Charset import java.util.jar.{JarFile, JarInputStream, JarOutputStream} import java.util.zip.{GZIPOutputStream, ZipEntry, ZipFile, ZipInputStream, ZipOutputStream} import ErrorHandling.translate import scala.reflect.{Manifest => SManifest} abstract class Using[Source, T] { protected def open(src: Source): T def apply[R](src: Source)(f: T => R): R = { val resource = open(src) try { f(resource) } finally { close(resource) } } protected def close(out: T): Unit } abstract class WrapUsing[Source, T](implicit srcMf: SManifest[Source], targetMf: SManifest[T]) extends Using[Source, T] { protected def label[S](m: SManifest[S]): String = m.runtimeClass.getSimpleName protected def openImpl(source: Source): T protected final def open(source: Source): T = translate("Error wrapping " + label(srcMf) + " in " + label(targetMf) + ": ") { openImpl(source) } } trait OpenFile[T] extends Using[JavaFile, T] { protected def openImpl(file: JavaFile): T protected final def open(file: JavaFile): T = { val parent = file.getParentFile if(parent != null) IO.createDirectory(parent) openImpl(file) } } object Using { def wrap[Source, T<: Closeable](openF: Source => T)(implicit srcMf: SManifest[Source], targetMf: SManifest[T]): Using[Source,T] = wrap(openF, closeCloseable) def wrap[Source, T](openF: Source => T, closeF: T => Unit)(implicit srcMf: SManifest[Source], targetMf: SManifest[T]): Using[Source,T] = new WrapUsing[Source, T] { def openImpl(source: Source): T = openF(source) def close(t: T): Unit = closeF(t) } def resource[Source, T <: Closeable](openF: Source => T): Using[Source,T] = resource(openF, closeCloseable) def resource[Source, T](openF: Source => T, closeF: T => Unit): Using[Source,T] = new Using[Source,T] { def open(s: Source): T = openF(s) def close(s: T): Unit = closeF(s) } def file[T <: Closeable](openF: JavaFile => T): OpenFile[T] = file(openF, closeCloseable) def file[T](openF: JavaFile => T, closeF: T => Unit): OpenFile[T] = new OpenFile[T] { def openImpl(file: JavaFile): T = openF(file) def close(t: T): Unit = closeF(t) } private def closeCloseable[T <: Closeable]: T => Unit = _.close() def bufferedOutputStream: Using[OutputStream, BufferedOutputStream] = wrap((out: OutputStream) => new BufferedOutputStream(out) ) def bufferedInputStream: Using[InputStream, BufferedInputStream] = wrap((in: InputStream) => new BufferedInputStream(in) ) def fileOutputStream(append: Boolean = false): OpenFile[BufferedOutputStream] = file(f => new BufferedOutputStream(new FileOutputStream(f, append))) def fileInputStream: OpenFile[BufferedInputStream] = file(f => new BufferedInputStream(new FileInputStream(f))) def urlInputStream: Using[URL, BufferedInputStream] = resource((u: URL) => translate("Error opening " + u + ": ")(new BufferedInputStream(u.openStream))) def fileOutputChannel: OpenFile[FileChannel] = file(f => new FileOutputStream(f).getChannel) def fileInputChannel: OpenFile[FileChannel] = file(f => new FileInputStream(f).getChannel) def fileWriter(charset: Charset = IO.utf8, append: Boolean = false): OpenFile[BufferedWriter] = file(f => new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f, append), charset)) ) def fileReader(charset: Charset): OpenFile[BufferedReader] = file(f => new BufferedReader(new InputStreamReader(new FileInputStream(f), charset)) ) def urlReader(charset: Charset): Using[URL, BufferedReader] = resource((u: URL) => new BufferedReader(new InputStreamReader(u.openStream, charset))) def jarFile(verify: Boolean): OpenFile[JarFile] = file(f => new JarFile(f, verify), (_: JarFile).close()) def zipFile: OpenFile[ZipFile] = file(f => new ZipFile(f), (_: ZipFile).close()) def streamReader: Using[(InputStream, Charset), InputStreamReader] = wrap{ (_: (InputStream, Charset)) match { case (in, charset) => new InputStreamReader(in, charset) } } def gzipInputStream: Using[InputStream, GZIPInputStream] = wrap((in: InputStream) => new GZIPInputStream(in, 8192) ) def zipInputStream: Using[InputStream, ZipInputStream] = wrap((in: InputStream) => new ZipInputStream(in)) def zipOutputStream: Using[OutputStream, ZipOutputStream] = wrap((out: OutputStream) => new ZipOutputStream(out)) def gzipOutputStream: Using[OutputStream, GZIPOutputStream] = wrap((out: OutputStream) => new GZIPOutputStream(out, 8192), (_: GZIPOutputStream).finish()) def jarOutputStream: Using[OutputStream, JarOutputStream] = wrap((out: OutputStream) => new JarOutputStream(out)) def jarInputStream: Using[InputStream, JarInputStream] = wrap((in: InputStream) => new JarInputStream(in)) def zipEntry(zip: ZipFile): Using[ZipEntry, InputStream] = resource((entry: ZipEntry) => translate("Error opening " + entry.getName + " in " + zip + ": ") { zip.getInputStream(entry) } ) }
Example 8
Source File: ApkFileUtil.scala From Argus-SAF with Apache License 2.0 | 5 votes |
package org.argus.amandroid.core.util import java.io._ import java.util.zip.ZipInputStream import org.argus.amandroid.core.ApkGlobal import org.argus.jawa.core.util.{FileResourceUri, FileUtil, ISeq} def getDexFile(apkUri: FileResourceUri, outputUri: FileResourceUri, createFolder: Boolean): FileResourceUri = { val apkFile = FileUtil.toFile(apkUri) if(!isZipFile(apkUri)) throw new RuntimeException("File "+ apkFile.getAbsolutePath + " is not a zip File!") val zipis = new ZipInputStream(new FileInputStream(apkFile)) val dirName = apkFile.getName.substring(0, apkFile.getName.lastIndexOf(".")) val outputDir = getOutputUri(apkUri, outputUri) val outputFile = FileUtil.toFile(FileUtil.appendFileName(outputDir, dirName + ".dex")) val ops = new FileOutputStream(outputFile) //resolve with apk file while(zipis.available() == 1){ val ze = zipis.getNextEntry if(ze != null) if(ze.getName.endsWith(".dex")){ var reading = true while(reading){ zipis.read() match { case -1 => reading = false case c => ops.write(c) } } } } ops.flush() zipis.close() FileUtil.toUri(outputFile) } def deleteOutputs(apkUri: FileResourceUri, outputUri: FileResourceUri): Unit = { val outputDir = FileUtil.toFile(getOutputUri(apkUri, outputUri)) if(outputDir.exists()){ FileUtil.deleteDir(outputDir) } } }
Example 9
Source File: AndroidXMLParser.scala From Argus-SAF with Apache License 2.0 | 5 votes |
package org.argus.amandroid.core.parser import java.io.File import java.util.zip.ZipEntry import java.util.zip.ZipInputStream import java.io.FileInputStream def handleAndroidXMLFiles(apk: File, fileNameFilter: Set[String], handler: AndroidXMLHandler): Unit = { try { var archive: ZipInputStream = null try { archive = new ZipInputStream(new FileInputStream(apk)) var entry: ZipEntry = null entry = archive.getNextEntry while (entry != null) { val entryName = entry.getName handler.handleXMLFile(entryName, fileNameFilter, archive) entry = archive.getNextEntry } } finally { if (archive != null) archive.close() } } catch { case e: Exception => e.printStackTrace() throw e } } }
Example 10
Source File: StreamUtilities.scala From mmlspark with MIT License | 5 votes |
// Copyright (C) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in project root for information. package com.microsoft.ml.spark.core.env import java.io.{ByteArrayOutputStream, InputStream} import java.util.zip.ZipInputStream import org.apache.commons.io.IOUtils import scala.io.Source import scala.util.Random object StreamUtilities { import scala.util.{Failure, Success, Try} def usingMany[T <: AutoCloseable, U](disposable: Seq[T])(task: Seq[T] => U): Try[U] = { try { Success(task(disposable)) } catch { case e: Exception => Failure(e) } finally { disposable.foreach(d => d.close()) } } def using[T <: AutoCloseable, U](disposable: T)(task: T => U): Try[U] = { try { Success(task(disposable)) } catch { case e: Exception => Failure(e) } finally { disposable.close() } } def usingSource[T <: Source, U](disposable: T)(task: T => U): Try[U] = { try { Success(task(disposable)) } catch { case e: Exception => Failure(e) } finally { disposable.close() } } class ZipIterator(stream: InputStream, zipfile: String, random: Random, sampleRatio: Double = 1) extends Iterator[(String, Array[Byte])] { private val zipStream = new ZipInputStream(stream) private def getNext: Option[(String, Array[Byte])] = { var entry = zipStream.getNextEntry while (entry != null) { if (!entry.isDirectory && random.nextDouble < sampleRatio) { val filename = zipfile + java.io.File.separator + entry.getName //extracting all bytes of a given entry val byteStream = new ByteArrayOutputStream IOUtils.copy(zipStream, byteStream) val bytes = byteStream.toByteArray assert(bytes.length == entry.getSize, "incorrect number of bytes is read from zipstream: " + bytes.length + " instead of " + entry.getSize) return Some((filename, bytes)) } entry = zipStream.getNextEntry } stream.close() None } private var nextValue = getNext def hasNext: Boolean = nextValue.isDefined def next: (String, Array[Byte]) = { val result = nextValue.get nextValue = getNext result } } }
Example 11
Source File: UniversalArchiveReader.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.lf package archive import java.io._ import java.util.zip.ZipInputStream import com.daml.lf.data.Ref import com.daml.lf.language.LanguageMajorVersion import com.daml.daml_lf_dev.DamlLf import scala.util.{Failure, Success, Try} import com.daml.lf.data.TryOps.Bracket.bracket object UniversalArchiveReaderWithVersion { def apply() : UniversalArchiveReader[((Ref.PackageId, DamlLf.ArchivePayload), LanguageMajorVersion)] = UniversalArchiveReader(parseDalf) private def parseDalf(is: InputStream) = Try(Reader.readArchiveAndVersion(is)) } object SupportedFileType { def supportedFileType(f: File): Try[SupportedFileType] = if (DarFile.matchesFileExtension(f)) Success(DarFile) else if (DalfFile.matchesFileExtension(f)) Success(DalfFile) else Failure(UnsupportedFileExtension(f)) sealed abstract class SupportedFileType(fileExtension: String) extends Serializable with Product { def matchesFileExtension(f: File): Boolean = f.getName.endsWith(fileExtension) } final case object DarFile extends SupportedFileType(".dar") final case object DalfFile extends SupportedFileType(".dalf") case class UnsupportedFileExtension(file: File) extends RuntimeException(s"Unsupported file extension: ${file.getAbsolutePath}") }
Example 12
package coursier.launcher.internal import java.util.zip.{ZipEntry, ZipFile, ZipInputStream} import scala.collection.JavaConverters._ private[coursier] object Zip { def zipEntries(zipStream: ZipInputStream): Iterator[(ZipEntry, Array[Byte])] = new Iterator[(ZipEntry, Array[Byte])] { var nextEntry = Option.empty[ZipEntry] def update() = nextEntry = Option(zipStream.getNextEntry) update() def hasNext = nextEntry.nonEmpty def next() = { val ent = nextEntry.get val data = FileUtil.readFullyUnsafe(zipStream) update() // ZipInputStream seems not to be fine with custom deflaters, like some recent versions of proguard use. // This makes ZipOutputStream not handle some of these entries fine without this. // See https://github.com/spring-projects/spring-boot/issues/13720#issuecomment-403428384. // Same workaround as https://github.com/spring-projects/spring-boot/issues/13720 // (https://github.com/spring-projects/spring-boot/commit/a50646b7cc3ad941e748dfb450077e3a73706205#diff-2ff64cd06c0b25857e3e0dfdb6733174R144) ent.setCompressedSize(-1L) (ent, data) } } def zipEntries(zipFile: ZipFile): Iterator[(ZipEntry, Array[Byte])] = zipFile.entries().asScala.map { ent => val data = FileUtil.readFully(zipFile.getInputStream(ent)) // Doing this like above just in case ent.setCompressedSize(-1L) (ent, data) } }
Example 13
Source File: ZipUtil.scala From coursier with Apache License 2.0 | 5 votes |
import java.util.zip.{ZipEntry, ZipInputStream, ZipOutputStream} import java.io.{ByteArrayOutputStream, File, FileInputStream, FileOutputStream, InputStream} object ZipUtil { def addToZip(sourceZip: File, destZip: File, extra: Seq[(String, Array[Byte])]): Unit = { val is = new FileInputStream(sourceZip) val os = new FileOutputStream(destZip) val bootstrapZip = new ZipInputStream(is) val outputZip = new ZipOutputStream(os) def readFullySync(is: InputStream) = { val buffer = new ByteArrayOutputStream val data = Array.ofDim[Byte](16384) var nRead = is.read(data, 0, data.length) while (nRead != -1) { buffer.write(data, 0, nRead) nRead = is.read(data, 0, data.length) } buffer.flush() buffer.toByteArray } def zipEntries(zipStream: ZipInputStream): Iterator[(ZipEntry, Array[Byte])] = new Iterator[(ZipEntry, Array[Byte])] { private var nextEntry = Option.empty[ZipEntry] private def update() = nextEntry = Option(zipStream.getNextEntry) update() def hasNext = nextEntry.nonEmpty def next() = { val ent = nextEntry.get val data = readFullySync(zipStream) update() (ent, data) } } val extraNames = extra.map(_._1).toSet for ((ent, data) <- zipEntries(bootstrapZip) if !extraNames(ent.getName)) { // Same workaround as https://github.com/spring-projects/spring-boot/issues/13720 // (https://github.com/spring-projects/spring-boot/commit/a50646b7cc3ad941e748dfb450077e3a73706205#diff-2ff64cd06c0b25857e3e0dfdb6733174R144) ent.setCompressedSize(-1L) outputZip.putNextEntry(ent) outputZip.write(data) outputZip.closeEntry() } for ((dest, data) <- extra) { outputZip.putNextEntry(new ZipEntry(dest)) outputZip.write(data) outputZip.closeEntry() } outputZip.close() is.close() os.close() } }
Example 14
package docspell.files import java.io.InputStream import java.nio.file.Paths import java.util.zip.ZipInputStream import cats.effect._ import cats.implicits._ import fs2.{Pipe, Stream} import docspell.common.Binary object Zip { def unzipP[F[_]: ConcurrentEffect: ContextShift]( chunkSize: Int, blocker: Blocker ): Pipe[F, Byte, Binary[F]] = s => unzip[F](chunkSize, blocker)(s) def unzip[F[_]: ConcurrentEffect: ContextShift](chunkSize: Int, blocker: Blocker)( data: Stream[F, Byte] ): Stream[F, Binary[F]] = data.through(fs2.io.toInputStream[F]).flatMap(in => unzipJava(in, chunkSize, blocker)) def unzipJava[F[_]: Sync: ContextShift]( in: InputStream, chunkSize: Int, blocker: Blocker ): Stream[F, Binary[F]] = { val zin = new ZipInputStream(in) val nextEntry = Resource.make(Sync[F].delay(Option(zin.getNextEntry))) { case Some(_) => Sync[F].delay(zin.closeEntry()) case None => ().pure[F] } Stream .resource(nextEntry) .repeat .unNoneTerminate .map { ze => val name = Paths.get(ze.getName()).getFileName.toString val data = fs2.io.readInputStream[F]((zin: InputStream).pure[F], chunkSize, blocker, false) Binary(name, data) } } }
Example 15
Source File: Unzip.scala From sbt-flaky with Apache License 2.0 | 5 votes |
package flaky import java.io.File trait Unzip { def unzip(zipped: File, unzipDir: File, deleteOnExit: Boolean = true): Unit = { import java.io.{FileInputStream, FileOutputStream} import java.util.zip.ZipInputStream val fis = new FileInputStream(zipped) val zis = new ZipInputStream(fis) unzipDir.mkdirs() Stream .continually(zis.getNextEntry) .takeWhile(_ != null) .foreach { file => if (file.isDirectory) { val dir = new File(unzipDir, file.getName) dir.mkdirs() if (deleteOnExit){ dir.deleteOnExit() } } else { val file1 = new File(unzipDir, file.getName) if (deleteOnExit){ file1.deleteOnExit() } val fout = new FileOutputStream(file1) val buffer = new Array[Byte](1024) Stream.continually(zis.read(buffer)).takeWhile(_ != -1).foreach(fout.write(buffer, 0, _)) } } } }
Example 16
Source File: FileUtil.scala From mleap with Apache License 2.0 | 5 votes |
package ml.combust.bundle.serializer import java.io.{File, FileInputStream, FileOutputStream} import java.util.zip.{ZipEntry, ZipInputStream, ZipOutputStream} import resource._ case class FileUtil() { def rmRF(path: File): Array[(String, Boolean)] = { Option(path.listFiles).map(_.flatMap(f => rmRF(f))).getOrElse(Array()) :+ (path.getPath -> path.delete) } def extract(source: File, dest: File): Unit = { dest.mkdirs() for(in <- managed(new ZipInputStream(new FileInputStream(source)))) { extract(in, dest) } } def extract(in: ZipInputStream, dest: File): Unit = { dest.mkdirs() val buffer = new Array[Byte](1024 * 1024) var entry = in.getNextEntry while(entry != null) { if(entry.isDirectory) { new File(dest, entry.getName).mkdirs() } else { val filePath = new File(dest, entry.getName) for(out <- managed(new FileOutputStream(filePath))) { var len = in.read(buffer) while(len > 0) { out.write(buffer, 0, len) len = in.read(buffer) } } } entry = in.getNextEntry } } def zip(source: File, dest: File): Unit = { for(out <- managed(new ZipOutputStream(new FileOutputStream(dest)))) { zip(source, out) } } def zip(source: File, dest: ZipOutputStream): Unit = zip(source, source, dest) def zip(base: File, source: File, dest: ZipOutputStream): Unit = { val buffer = new Array[Byte](1024 * 1024) for(files <- Option(source.listFiles); file <- files) { val name = file.toString.substring(base.toString.length + 1) if(file.isDirectory) { dest.putNextEntry(new ZipEntry(s"$name/")) zip(base, file, dest) } else { dest.putNextEntry(new ZipEntry(name)) for (in <- managed(new FileInputStream(file))) { var read = in.read(buffer) while (read > 0) { dest.write(buffer, 0, read) read = in.read(buffer) } } } } } }
Example 17
Source File: Unzip.scala From openwhisk with Apache License 2.0 | 5 votes |
package org.apache.openwhisk.standalone import java.io.{File, FileOutputStream, InputStream} import java.util.zip.ZipInputStream object Unzip { def apply(is: InputStream, dir: File): Unit = { //Based on https://stackoverflow.com/a/40547896/1035417 val zis = new ZipInputStream((is)) val dest = dir.toPath Stream.continually(zis.getNextEntry).takeWhile(_ != null).foreach { zipEntry => if (!zipEntry.isDirectory) { val outPath = dest.resolve(zipEntry.getName) val outPathParent = outPath.getParent if (!outPathParent.toFile.exists()) { outPathParent.toFile.mkdirs() } val outFile = outPath.toFile val out = new FileOutputStream(outFile) val buffer = new Array[Byte](4096) Stream.continually(zis.read(buffer)).takeWhile(_ != -1).foreach(out.write(buffer, 0, _)) out.close() } } zis.close() } }
Example 18
Source File: RulesTxtDeploymentServiceSpec.scala From smui with Apache License 2.0 | 5 votes |
package models import java.io.{ByteArrayInputStream, ByteArrayOutputStream} import java.util.zip.ZipInputStream import org.apache.commons.io.IOUtils import org.scalatest.{FlatSpec, Matchers} class RulesTxtDeploymentServiceSpec extends FlatSpec with Matchers with ApplicationTestBase { private lazy val service = injector.instanceOf[RulesTxtDeploymentService] private var inputIds: Seq[SearchInputId] = Seq.empty override protected def beforeAll(): Unit = { super.beforeAll() createTestCores() inputIds = createTestRule() } private def rulesFileContent(ruleIds: Seq[SearchInputId]): String = s"""aerosmith => | SYNONYM: mercury | DOWN(10): battery | UP(10): notebook | FILTER: zz top | @{ | "_log" : "${ruleIds.head}" | }@ | |mercury => | SYNONYM: aerosmith | DOWN(10): battery | UP(10): notebook | FILTER: zz top | @{ | "_log" : "${ruleIds.head}" | }@ | |shipping => | DECORATE: REDIRECT http://xyz.com/shipping | @{ | "_log" : "${ruleIds.last}" | }@""".stripMargin "RulesTxtDeploymentService" should "generate rules files with correct file names" in { val rulesTxt = service.generateRulesTxtContentWithFilenames(core1Id, "LIVE", logDebug = false) rulesTxt.solrIndexId shouldBe core1Id rulesTxt.decompoundRules shouldBe empty rulesTxt.regularRules.content.trim shouldBe rulesFileContent(inputIds) rulesTxt.regularRules.sourceFileName shouldBe "/tmp/search-management-ui_rules-txt.tmp" rulesTxt.regularRules.destinationFileName shouldBe "/usr/bin/solr/liveCore/conf/rules.txt" } it should "validate the rules files correctly" in { val rulesTxt = service.generateRulesTxtContentWithFilenames(core1Id, "LIVE", logDebug = false) service.validateCompleteRulesTxts(rulesTxt, logDebug = false) shouldBe empty val badRulesTxt = rulesTxt.copy(regularRules = rulesTxt.regularRules.copy(content = "a very bad rules file")) service.validateCompleteRulesTxts(badRulesTxt, logDebug = false) shouldBe List("Line 1: Missing input for instruction") } it should "provide a zip file with all rules files" in { val out = new ByteArrayOutputStream() service.writeAllRulesTxtFilesAsZipFileToStream(out) val bytes = out.toByteArray val zipStream = new ZipInputStream(new ByteArrayInputStream(bytes)) val firstEntry = zipStream.getNextEntry firstEntry.getName shouldBe "rules_core1.txt" IOUtils.toString(zipStream, "UTF-8").trim shouldBe rulesFileContent(inputIds) val secondEntry = zipStream.getNextEntry secondEntry.getName shouldBe "rules_core2.txt" IOUtils.toString(zipStream, "UTF-8").trim shouldBe "" } }
Example 19
Source File: ZipBombDetectionSpec.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.lf.archive import java.io.FileInputStream import java.util.zip.ZipInputStream import com.daml.bazeltools.BazelRunfiles import org.scalatest.{FlatSpec, Matchers, TryValues} final class ZipBombDetectionSpec extends FlatSpec with Matchers with TryValues { private def bomb: ZipInputStream = new ZipInputStream( new FileInputStream(BazelRunfiles.rlocation("daml-lf/archive/DarReaderTest.dar")) ) "DarReader" should "reject a zip bomb with the proper error" in { DarReader() .readArchive("t", bomb, entrySizeThreshold = 1024) .failure .exception shouldBe a[Errors.ZipBomb] } "UniversalArchiveReader" should "reject a zip bomb with the proper error" in { UniversalArchiveReader(entrySizeThreshold = 1024) .readDarStream("t", bomb) .failure .exception shouldBe a[Errors.ZipBomb] } }