Ordnerkomprimierung mit Scala. Verwenden von java.util.zip.ZipOutputStream.

Was du machen willst

Wie der Titel schon sagt. Für Memos.

  import java.io._
  import java.nio.charset.Charset
  import java.util.zip.{ZipEntry, ZipOutputStream}

  def main(args: Array[String]): Unit = {
    zipFolder("file\\folder", "file\\folder.zip", "Shift_JIS")
  }

  def zipFolder(targetDir: String, outputZip: String, mojiCode: String): Unit = {
    val baseFile = new File(targetDir)
    val zos = new ZipOutputStream(new FileOutputStream(new File(outputZip)), Charset.forName(mojiCode))
    val fileList: Seq[File] = baseFile.listFiles()
    zipFileList(zos, fileList, baseFile)
    zos.closeEntry()
    zos.close()
  }

  private def zipFileList(zos: ZipOutputStream, fileList: Seq[File], baseFile: File): Unit = {
    for (file <- fileList) {
      if (file.isDirectory) {
        zipFileList(zos, file.listFiles(), baseFile)
      } else {
        entryZos(file, zos, baseFile)
      }
    }
  }

  private def entryZos(targetFile: File, zos: ZipOutputStream, baseFile: File): Unit = {
    val entry = new ZipEntry(targetFile.getAbsolutePath.replace(baseFile.getParentFile.getAbsolutePath, "").drop(1))
    zos.putNextEntry(entry)
    val in = new BufferedInputStream(new FileInputStream(targetFile))
    writeZos(zos, in, targetFile)
    in.close()
  }

  private def writeZos(zos: ZipOutputStream, in: BufferedInputStream, targetFile: File) : Unit = {
    val readBytes = in.read()
    if (readBytes != -1) {
      zos.write(readBytes)
      writeZos(zos, in, targetFile)
    }
  }

Recommended Posts

Ordnerkomprimierung mit Scala. Verwenden von java.util.zip.ZipOutputStream.
Verwenden Sie Pair mit OpenJDK
Versuchen Sie es mit GloVe mit Deeplearning4j
Japanisieren Sie mit i18n mit Rails
Verwenden von Mapper mit Java (Spring)
[Einführung] Erstellen Sie MVC mit Scala
Verwenden von PlantUml mit Honkit [Docker]