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

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
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值