java io 文件名乱码,zip压缩解决文件名中文乱码有关问题

使用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配置如下:

org.apache.commons

commons-compress

1.5

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:

095343127.jpg

(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文件:

095343128.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值