java压缩文件中文名乱码问题

import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
改为
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

ant包里提供ZipOutputStream类的setEncoding("gbk")方法。

zos.setEncoding("gbk");

ant包下载(点击进入页面,另开一个新页面)

下载地址如下:

https://mvnrepository.com/artifact/org.apache.ant/ant/1.7.1  (点击进入页面,本页面被覆盖)

package file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

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

public class Zip {

    public static void main(String[] args) {
        //文件所在路径
        String path = "E:\\test";
        File dir = new File(path);
        if(!dir.isDirectory()) {
            System.out.println(path + "--路径不存在!");
        }
        //所有文件
        File[] files = new File(path).listFiles();
        if(files == null || files.length < 1) {
            System.out.println(path + "--路径下无文件!");
        }
        //压缩文件名
        String zipname = "hello.zip";
        File zipFile = new File(path + File.separator + zipname);

        if(zipFiles(files, zipFile) == 0) {
            System.out.println("压缩文件ok!");
        }
    }

    public static int zipFiles(File[] files, File zipFile) {
        if (zipFile.exists()) {
            System.out.println(zipFile + "--压缩文件已存在!");
            return -1;
        }
        BufferedInputStream bis = null;
        ZipOutputStream zos = null;
        try {
            zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
            byte[] bufs = new byte[1024*10];
            for(int i=0;i<files.length;i++){
                //创建ZIP实体,并添加进压缩包
                ZipEntry zipEntry = new ZipEntry(files[i].getName());
                zos.putNextEntry(zipEntry);
                //乱码问题
                zos.setEncoding("gbk");
                bis = new BufferedInputStream(new FileInputStream(files[i]), 1024*10);
                int read = 0;
                while((read=bis.read(bufs, 0, 1024*10)) != -1){
                    zos.write(bufs,0,read);
                }
            }
            return 0;
        }catch (IOException e) {
            e.printStackTrace();
            System.out.println("压缩文件过程BUG了!");
            return -1;
        } finally {
            try {
                if (zos != null) {
                    zos.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (bis != null) {
                    bis.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }
}

原文地址:https://www.cnblogs.com/likaixin/p/11365609.html

时间: 2024-10-09 14:33:28

java压缩文件中文名乱码问题的相关文章

java压缩文件解压:调用WinRAR5命令强于自己写代码实现

最近,手上维护着一个几年前的系统,技术是用的JSP+Strust2,系统提供了rar和zip两种压缩格式的解压功能,后台是用java实现的 1.解压rar格式,采用的是java-unrar-0.3.jar 2.解压zip格式,采用的是commons-compress-1.4.1.jar 但最近根据用户反馈的问题,发现系统存在两个关于压缩文件解压的问题: 1.有些压缩文件解压之后出现中文乱码: 2.有些压缩文件根本不能解压 为了弥补上述两个问题,在之前代码的基础上打了一些补丁,来解决zip压缩包乱

Java压缩文件

import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.CRC32; import java.util.zip.CheckedOutputStream; import org.apache.tools.zip.ZipEntry; import org.apache.to

Java 压缩文件

package com; import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.zip.CRC32;import java.util.zip.CheckedOutputStream; import org.apache.tools.zip.ZipEntry;import org.ap

简单测试Demo:如何用Java压缩文件夹和文件

一.直接贴出测试代码 1 package com.jason.zip; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.OutputStream; 8 import java.util.ArrayList; 9 import java.util.List; 10 i

Java 压缩文件夹工具类(包含解压)

依赖jar <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.18</version> </dependency> CompressUtils.java package utils; import java.io.BufferedInputStream;

Java压缩文件以及解压文件

压缩流类: GZIPOutputStream和ZIpOutputStream可分别把数据压缩成GZip格式和Zip格式 GZIPInputStream和ZipInputStream可分别把压缩成GZIP格式或Zip的数据解压恢复原状 GZIP是多个文件压缩成一个文件,Zip是单个文件压缩: d多个文件依次压缩,out.putNextEntry是将文件的入口信息压缩到压缩文件中,getNextEntry判断是否有下一个文件 原文地址:https://www.cnblogs.com/mcmx/p/9

java压缩文件出现中文乱码问题

在项目中需要压缩文件下载,做完了发现有中文乱码问题,终于明白了. 引入ant.jar包 import org.apache.tools.zip.ZipEntry;   import org.apache.tools.zip.ZipOutputStream;

java 读取文件中文乱码问题

很少写java io的代码,今天整了一个发现 本地调试好好的,放到jmeter里就打印乱码.一番折腾,终于搞定~直接上代码: List<Order> orderList = new ArrayList<Order>(); InputStream fis = null; InputStreamReader isr = null; BufferedReader br = null; try { String jsonStr = ""; //fis = new Fil

从服务器下载文件中文名乱码解决方法

try { string excelName = Request["excelName"].ToString(); //文件路径 string fileName = Request["fileName"].ToString(); //下载的文件名 if(!(string.IsNullOrEmpty(excelName)|| string.IsNullOrEmpty(fileName))) { Response.Charset = "GB2312"