欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

zip压缩解决文件名中文乱码问题

程序员文章站 2022-03-15 08:39:09
...

使用jdk自带的zip工具类java.util.zip.ZipEntry,java.util.zip.ZipFile,java.util.zip.ZipInputStream,java.util.zip.ZipOutputStream 进行zip压缩时,没法解决文件名中文乱码问题

这里使用apache 旗下的commons-compress 库,官网是:http://commons.apache.org/proper/commons-compress/download_compress.cgi

 

我使用maven 进行构建,pom配置如下:

<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-compress</artifactId>
			<version>1.5</version>
		</dependency>

 commons-compress 解决了文件名中文乱码问题,参考:http://www.cnblogs.com/un4sure/archive/2011/09/27/2193298.html

范例:

(1)压缩单个文件:

压缩D:\\Temp\\a\\password_密码.xls,压缩后的zip文件是d:\\Temp\\a\\a\\b\\c.zip

package com.jn.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.junit.Test;

import com.common.util.SystemUtil;
import com.io.hw.file.util.FileUtils;

public class ZIPTest {

	@Test
	public void test_01() {
		try {
			FileOutputStream fou = new FileOutputStream("d:\\Temp\\a\\a\\b\\c.zip");
			ArchiveOutputStream archOuts = new ArchiveStreamFactory()
					.createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou);
			if(archOuts instanceof ZipArchiveOutputStream){
				ZipArchiveOutputStream zipOut=(ZipArchiveOutputStream)archOuts;
				String file="D:\\Temp\\a\\password_密码.xls";
				ZipArchiveEntry zipEntry=new ZipArchiveEntry(new File(file),SystemUtil.getFileSimpleName(file));
				zipOut.putArchiveEntry(zipEntry);
				zipOut.write(FileUtils.readBytes4file(file));
				
				zipOut.closeArchiveEntry();
				zipOut.flush();
				zipOut.finish();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (ArchiveException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 运行之后会生成文件d:\\Temp\\a\\a\\b\\c.zip:
zip压缩解决文件名中文乱码问题
            
    
    博客分类: Java zip压缩中文乱码文件是中文commons-compress
 

(1)压缩多个文件:

@Test
	public void test_02() {
		try {
			FileOutputStream fou = new FileOutputStream(
					"d:\\Temp\\a\\a\\b\\c.zip");
			ArchiveOutputStream archOuts = new ArchiveStreamFactory()
					.createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou);
			if (archOuts instanceof ZipArchiveOutputStream) {
				ZipArchiveOutputStream zipOut = (ZipArchiveOutputStream) archOuts;

				String file01 = "D:\\Temp\\a\\password_密码.xls";
				ZipArchiveEntry zipEntry = new ZipArchiveEntry(
						new File(file01), SystemUtil.getFileSimpleName(file01));
				zipOut.putArchiveEntry(zipEntry);
				zipOut.write(FileUtils.readBytes4file(file01));

				String file02 = "D:\\Temp\\a\\ccc.jar";
				ZipArchiveEntry zipEntry2 = new ZipArchiveEntry(
						new File(file01), SystemUtil.getFileSimpleName(file02));
				zipOut.putArchiveEntry(zipEntry2);
				zipOut.write(FileUtils.readBytes4file(file02));

				zipOut.closeArchiveEntry();
				zipOut.flush();
				zipOut.finish();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (ArchiveException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 压缩后的zip文件:
zip压缩解决文件名中文乱码问题
            
    
    博客分类: Java zip压缩中文乱码文件是中文commons-compress
 

 

  • zip压缩解决文件名中文乱码问题
            
    
    博客分类: Java zip压缩中文乱码文件是中文commons-compress
  • 大小: 14.7 KB
  • zip压缩解决文件名中文乱码问题
            
    
    博客分类: Java zip压缩中文乱码文件是中文commons-compress
  • 大小: 24.8 KB