当前位置: 代码迷 >> 综合 >> scala使用org.apache.tools.zip压缩包
  详细解决方案

scala使用org.apache.tools.zip压缩包

热度:86   发布时间:2023-09-19 00:36:15.0
def zipFileNew(title: String, files: List[String]): String = {
    var fileName = "fail"
    try {
      //生成文件
      val exportFile = new File(s"$LocalFilePath/${title}_${formatTimStamp()}.zip")
      if (!exportFile.getParentFile.exists())
        exportFile.getParentFile.mkdirs
      if (!exportFile.exists())
        exportFile.createNewFile
      //输出流
      val os: OutputStream = new FileOutputStream(exportFile)


      val zipOut: ZipOutputStream = new ZipOutputStream(os)


      var input: FileInputStream = null
      val buf: Array[Byte] = new Array[Byte](4096)
      var len = 0


      for (childFileName <- files) {
        val file: File = new File(childFileName)
        val fileSize:Int = file.length().toInt
        val buf:Array[Byte] =    //定义缓冲区
        if(fileSize < 1024){
          new Array[Byte](fileSize)
        }else if (fileSize>= 1024 && fileSize< 4096){
          new Array[Byte](1024)
        }else if (fileSize>= 4096 && fileSize< 4096){
          new Array[Byte](4096)
        }else{
          new Array[Byte](8192)
        }
        //  val len:Int = file.length().toInt
        if (file.exists()) {
          val ze: ZipEntry = new ZipEntry(file.getName())
          input = new FileInputStream(file)
          zipOut.setEncoding("gbk")
          zipOut.putNextEntry(ze)


          val bis: BufferedInputStream = new BufferedInputStream(input)
          while ((bis.read(buf)) >= 1) {
             // len = bis.read(buf,0,len)
              zipOut.write(buf, 0,buf.length)
            //zipOut.write(buf)
          }
          input.close()
          zipOut.closeEntry()
        }
      }
      zipOut.close()
      //关闭输出流
      os.close()
      if (exportFile.exists && exportFile.length() > 22)
        fileName = exportFile.getName
      else
        fileName = "1111"
    } catch {
      case e: Exception => {
        log.error(s"JdbcExport Error:${e}+++${e.getStackTrace}+++++${e.getStackTraceString}++++${e.printStackTrace()}")
      }
    }
    fileName
  }
  相关解决方案