java zip打包与乱码的解决

使用java在linux中将多个文件打包为zip,并解决中文文件名乱码 近两天在开发过程中碰到一个需求,需要将服务器上的多个文件打包为ZIP,并进行下载。现将打包核心代码贴出来,以便相互交流: /** * * @param srcfile 需要打包为zip的文件集合 * @param zipfile 创建的zip文件 */ public void zipFiles(List<File> srcfile, File zipfile) { byte[] buf = new... 阅读详情
关于 java zip 打包用的场景还是有不少,包括在归档的时候,还有就是在提交数据的时候,一般都会采用这种方式。但是这里面最麻烦的就是java乱码的问题。

解决乱码的问题主要是引用apache的包ant.jar。然后注意下面红色代码部分,java自带的包中也有这两个类。如果乱码最好是采用apache的这两个类。这样才会有设置编码的 zos.setEncoding("gbk") 这个方法。这样就可解决java zip 打包的知码问题。



下面是演示的 java代码:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipFile;

//这里注意不能采用java下面的类包,不然没有设置编码的方法

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;


/**
* @Copyright @ 2012 All right reserved
* @version 创建时间:Created on 2012-12-19
* @author 作者:Create by www.360buyli.com
* @Email: 360buyli@gmail.com
* @description eclipse注释模板
*/

public class ZipUtil {

public static final String ZIP_FILENAME = ""; // 需要解压缩的文件名
public static final String ZIP_DIR = ""; // 需要压缩的文件夹
public static final String UN_ZIP_DIR = ""; // 要解压的文件目录
public static final int BUFFER = 1024; // 缓存大小



public static void main(String[] args) {
  try {
   zipFile("F:\\page","F:\\page\\demo.zip");
  } catch (Exception e) {
   e.printStackTrace();
  }
}

public static void zipFile(String baseDir, String fileName)
   throws Exception {
  List fileList = getSubFiles(new File(baseDir));
  ZipOutputStream zos = new ZipOutputStream(
    new FileOutputStream(fileName));
  ZipEntry ze = null;
  byte[] buf = new byte[BUFFER];
  int readLen = 0;
  for (int i = 0; i < fileList.size(); i++) {
   File f = (File) fileList.get(i);
   ze = new ZipEntry(getAbsFileName(baseDir, f));
   ze.setSize(f.length());
  
   ze.setTime(f.lastModified());
   zos.putNextEntry(ze);
   InputStream is = new BufferedInputStream(new FileInputStream(f));
   while ((readLen = is.read(buf, 0, BUFFER)) != -1) {
    zos.write(buf, 0, readLen);
   }
   is.close();
  }
  zos.setEncoding("gbk");
  zos.close();
}

private static String getAbsFileName(String baseDir, File realFileName) {
  File real = realFileName;
  File base = new File(baseDir);
  String ret = real.getName();
  while (true) {
   real = real.getParentFile();
   if (real == null)
    break;
   if (real.equals(base))
    break;
   else
    ret = real.getName() + "/" + ret;
  }
  return ret;
}

private static List getSubFiles(File baseDir) {
  List ret = new ArrayList();
  File[] tmp = baseDir.listFiles();
  for (int i = 0; i < tmp.length; i++) {
   if (tmp[i].isFile())
    ret.add(tmp[i]);
   if (tmp[i].isDirectory())
    ret.addAll(getSubFiles(tmp[i]));
  }
  return ret;
}

public static void upZipFile() throws Exception {
  ZipFile zfile = new ZipFile(ZIP_FILENAME);
  Enumeration zList = zfile.entries();
  ZipEntry ze = null;
  byte[] buf = new byte[1024];
  while (zList.hasMoreElements()) {
   ze = (ZipEntry) zList.nextElement();
   if (ze.isDirectory()) {
    File f = new File(ZIP_DIR + ze.getName());
    f.mkdir();
    continue;
   }
   OutputStream os = new BufferedOutputStream(new FileOutputStream(
     getRealFileName(ZIP_DIR, ze.getName())));
   InputStream is = new BufferedInputStream(zfile.getInputStream(ze));
   int readLen = 0;
   while ((readLen = is.read(buf, 0, 1024)) != -1) {
    os.write(buf, 0, readLen);
   }
   is.close();
   os.close();
  }
  zfile.close();
}

public static File getRealFileName(String baseDir, String absFileName) {
  String[] dirs = absFileName.split("/");
  File ret = new File(baseDir);
  if (dirs.length > 1) {
   for (int i = 0; i < dirs.length - 1; i++) {
    ret = new File(ret, dirs[i]);
   }
   if (!ret.exists())
    ret.mkdirs();
   ret = new File(ret, dirs[dirs.length - 1]);
   return ret;
  }
  return ret;
}

public static void deleteDirFile(String path) {
  File file = new File(path);
  if (file.isDirectory()) { // 如果是目录,先递归删除
   String[] list = file.list();
   for (int i = 0; i < list.length; i++) {
    deleteDirFile(path + "\\" + list[i]); // 先删除目录下的文件
   }
  }
  file.delete();
}

public static String newFolder(String dir) {
  java.io.File myFilePath = new java.io.File(dir);
  if (myFilePath.isDirectory()) {
  } else {
   myFilePath.mkdirs();
  }
  return dir;
}

public static String getFileNames(String path) {

  File file = new File(path); // get file list where the path has
  File[] array = file.listFiles(); // 获得文件列表
  String pdfNames = "";

  for (int i = 0; i < array.length; i++) {
   if (array[i].isFile()) {
    if (array[i].getName().endsWith(".pdf")) { // 获得pdf文件名称
     pdfNames += array[i].getName().substring(0,
       array[i].getName().length() - 4)
       + ",";
    }
   }
  }
  if (pdfNames.length() > 0) {
   pdfNames.substring(0, pdfNames.length() - 1);
  }
  return pdfNames;
}

public static void copyFile(String oldPath, String newPath) {
  try {
   int bytesum = 0;
   int byteread = 0;
   File oldfile = new File(oldPath);
   if (oldfile.exists()) { // 文件存在时
    InputStream inStream = new FileInputStream(oldPath); // 读入原文件
    FileOutputStream fs = new FileOutputStream(newPath);
    byte[] buffer = new byte[1444];
    while ((byteread = inStream.read(buffer)) != -1) {
     bytesum += byteread; // 字节数文件大小
     fs.write(buffer, 0, byteread);
    }
    inStream.close();
   }
  } catch (Exception e) {
   System.out.println("copy file error!");
   e.printStackTrace();
  }
}

public static boolean fileExist(String fileNames, String pdfName) {
  boolean flag = false;
  if (!"".equals(fileNames)) {
   String[] nameArr = fileNames.split(",");
   for (int i = 0; i < nameArr.length; i++) {
    if (pdfName.equals(nameArr[i])) { // 如果文件名相同则执行拷贝操作(拷贝到zip目录准备打包)
     flag = true;
     break;
    }
   }
  }
  return flag;
}

public static void deleteFileAndDir(String path) {
  File file = new File(path);
  File[] array = file.listFiles();
  for (int i = 0; i < array.length; i++) {
   if (array[i].isFile()) {
    array[i].delete();
   } else if (array[i].isDirectory()) {
    deleteDirFile(array[i].getPath());
   }
  }
}

}

java压缩zip文件解决中文乱码问题 java压缩文件成zip实现无乱码 内置类与jar包 立即下载

相关推荐

π_RL:解锁流匹配VLA强化学习后训练的关键技术与实战解析

本文深入解析了π_RL框架如何通过流匹配(flow matching)与强化学习(RL)的结合,解决视觉语言动作模型(VLA)在后训练中的关键挑战。详细介绍了Flow Noise和Flow SDE两大核心技术,以及它们在机器人控制任务中的实战效果,显著提升了模型的性能、数据效率和泛化能力。

weixin_29061531的博客 220

Java解压zip 解决编码和中文乱码问题

项目由GBK转成UTF-8 遇到原有解析zip发现中文文件名称乱码问题 <!--pom包--> <dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>1.3.2...

风起未来 6476

华为EC6108V9E刷机实战:从U盘准备到开机优化的完整避坑指南

本文提供华为悦盒EC6108V9E刷机与优化的完整实战指南。针对搭载RK3228芯片和安卓4.4.4系统的设备,从型号确认、固件选择、U盘准备,到详细刷机步骤、常见故障排除,以及刷机后的深度性能优化,手把手帮助用户规避风险,让旧盒子焕发新生,成为流畅的全能媒体中心。

weixin_29324401的博客 1193

Java程序在Linux解压zip,文件名乱码解决

【代码】Java程序在Linux解压zip,文件名乱码解决。

JavaDaBaiCai的博客 1732

ADS Layout设计实战:从参数设置到协同仿真

本文详细介绍了ADS Layout设计的完整实战流程,从新建工程、单位设置、个性化偏好配置等基础操作入手,逐步深入到基板参数配置、端口设置与电磁仿真器选择等核心环节。重点阐述了参数化版图设计与扫描优化、以及原理图与Layout协同仿真的高级技巧,并通过一个微带线低通滤波器设计案例,完整演示了从理论到实现的闭环设计方法,帮助工程师高效、准确地完成高频电路版图设计与验证。

weixin_29268637的博客 799

宜搭子表单(自定义页面全部展示)

效果:增加自定义页面添加表格组件,配置数据源变量: formUuid'表单编码'变量: pageSize10变量: currentPage1。

2301_80286061的博客 2278

java csv文件放入zip 解压以后乱码

在本机下载解压以后没有问题, 发布到服务器以后解压却变成编码以后的。 ZipOutputStream zipTempFile = null; 后来查了一下 发现可以编码但是引入的包要Apache下的 zipTempFile.setEncoding("gbk");//要引用Apache下面的包 才有shezhiorg.apache.tools.zip.ZipOutputStream; 问

zy_crazy_code的博客 941

从零构建智慧农业监测终端:STM32数据采集与LoRa组网实战

本文详细介绍了如何从零构建智慧农业监测终端,涵盖STM32数据采集与LoRa组网实战。通过DHT22温湿度传感器和YL-69土壤湿度传感器实现精准环境监测,结合LoRa无线传输技术解决偏远农田信号问题。文章还分享了硬件选型、电路设计、低功耗优化及Flutter跨平台应用开发等关键技巧,助力农业智能化升级。

weixin_29172963的博客 357

Java中压缩与解压--中文文件名乱码解决办法

http://xxw8393.blog.163.com/blog/static/37256834200993051226320/ java对於文字的编码是以 unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作,碰到中文档名或路径,那当然是以unicode来处理罗!但是,现在市面上的压缩及解压缩软体,例如winzip,却是不

铁锹在手,天下我有 1万+

华为OD面试手撕真题目录

2026最新华为OD面试手撕真题 , 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解.

qq_45776114的博客 1万+

【WRF安装第三期(Ubuntu)】搭建WRF编译所需系统-第三方依赖库安装

WRF安装第三期:搭建WRF编译所需系统-第三方依赖库安装

WW、forever的博客 3138

java zip 中文文件名乱码_java使用zip压缩中文文件名乱码的解决办法

java使用zip压缩中文文件名乱码的解决办法发布时间:2020-06-15 15:20:58来源:亿速云阅读:106作者:元一java概述Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复...

weixin_30744725的博客 5307

configure: error: no acceptable C compiler found in $PATH解决方案

本文主要介绍了configure: error: no acceptable C compiler found in $PATH解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 4万+

java 打包乱码_java zip打包与乱码的解决

importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStrea...

weixin_32001191的博客 236

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java linux打包文件夹_使用java在linux中将多个文件打包为zip,并解决中文文件名乱码...

近两天在开发过程中碰到一个需求,需要将服务器上的多个文件打包为ZIP,并进行下载。现将打包核心代码贴出来,以便相互交流:/**** @param srcfile 需要打包为zip的文件集合* @param zipfile 创建的zip文件*/public void zipFiles(List srcfile, File zipfile) {byte[] buf = new...

weixin_39555415的博客 416

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java 打包zip路径中文_解决java中ZipFile解压缩时候的中文路径和乱码问题

JAVA中对jar文件或zip文件解压的时候,可以使用JDK内置的API:JarFile和ZipFile,在windows下解压这2种格式文件的时候,经常报以下错误:Exception in thread "main" java.lang.IllegalArgumentException: MALFORMEDat java.util.zip.ZipCoder.toString(ZipCoder.j...

weixin_29098367的博客 948

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

(java)解决文件是中文名打包成zip文件名称乱码的问题。

1、引人 import org.apache.tools.zip.ZipEntry;  import org.apache.tools.zip.ZipOutputStream;类 2、方法 /* billNos:要打包的文件列表 suffix:后缀名 return 打包文件路径 */ private String packZip(List billNos, String suff

menu 9459

java 生成zip文件并导出

总结一下,关于Java下载zip文件并导出的方法,浏览器导出。      String downloadName = "下载文件名称.zip"; downloadName = BrowserCharCodeUtils.browserCharCodeFun(request, downloadName);//下载文件名乱码问题解决 //将文...

weixin_30483495的博客 606

用Java实现ZIP压缩文件和目录程序代码

由于java.util.zip.ZipOutputStream有中文乱码问题,所以采用org.apache.tools.zip.ZipOutputStream。 以下是代码:packagenet.szh.zip; importjava.io.BufferedInputStream; importjava.io.File; importjava.io.FileInp...

weixin_33812433的博客 72

Java Zip实现

package com.sofree.common.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.ap

燃烧JAVA 680

Java中字符串生成文件打包为zip下载

Java中字符串生成文件打包为zip下载

qq_45454550的博客 1034

java zip上传_JavaWeb实现多文件上传及zip打包下载

本文实例为大家分享了javaweb多文件上传及zip打包下载的具体代码,供大家参考,具体内容如下项目中经常会使用到文件上传及下载的功能。本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分。首先明确一点:无法通过页面的无刷新ajax请求,直接发下载、上传请求。上传和下载,均需要在整页请求的基础上实现。项目中一般通过构建form表单形式实现这一功能。一、多文件上传...

weixin_35436993的博客 620

java图片导出为zip

碰到一个需求,要导出一批人员的头像,所以想导出一个压缩包给用户。   代码所需要的包为commons-compress-1.6.jar, 如果用的是maven,maven代码为: &lt;dependency&gt; &lt;groupId&gt;org.apache.commons&lt;/groupId&gt; &lt;arti...

lawliet1217的博客 2491
上一篇: 关于tomcat版本的选择
下一篇: dom4j操作xml时的乱码与格式化
sr2012
博客等级 码龄14年 0粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值