java 压缩文件 中文 文件夹_java压缩文件/文件夹的方法(解决中文乱码问题) | 学步园...

最近项目中用到中文文件(名)的文件压缩功能,发现java的基本zip库是不支持中文文件名的。参考了网上的一些解决方法,但大多存在问题,后来发现Ant的apache tools下的zip库是支持中文的。下面就是采用该方式实现的在中文文件名下的文件压缩代码:

在给出实现代码之前,有一点需要指出,那就是必须要在工程中引入Ant.jar的包,否则会导致编译无法通过。

package test;

import java.io.BufferedOutputStream;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.zip.Adler32;

import java.util.zip.CheckedOutputStream;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

/**

* 文件压缩(支持中文文件名)

* @author gaoyusi

*

*/

public class FileHelper {

/**

* 中文条件下文件(夹)压缩

* @throws IOException

*/

public static void zipCompress(String src,String des)

throws IOException{

ZipOutputStream out=null;

try {

CheckedOutputStream cusm=

new CheckedOutputStream(new FileOutputStream(des),new Adler32());

out=new ZipOutputStream(new BufferedOutputStream(cusm));

fileZip(new File(src),out,"");

}finally{

if(out!=null){

out.close();

}

}

}

private static void fileZip(File file, ZipOutputStream out,

String base) throws IOException{

if(file.isFile()){

if(base.length()>0){

out.putNextEntry(new ZipEntry(base));

}else{

out.putNextEntry(new ZipEntry(file.getName()));

}

BufferedReader in=new BufferedReader(

new InputStreamReader(new FileInputStream(file),"ISO8859_1"));

int c;

while((c=in.read())!=-1){

out.write(c);

}

in.close();

}else if(file.isDirectory()){

File[] subFiles=file.listFiles();

out.putNextEntry(new ZipEntry(base+File.separator));

base=base.length()!=0?base+File.separator:"";

for(File subFile:subFiles){

fileZip(subFile,out,base+subFile.getName());

}

}

}

}

测试代码如下:

package test;

import org.apache.log4j.Logger;

import org.junit.Test;

/**

* 中文文件压缩测试

* @author gaoyusi(http://blog.csdn.net/gaoyusi4964238)

*

*/

public class TestFileZip {

/*需要压缩的源文件夹路径*/

private String folderSrcPath="D://TEMP//";

/*压缩后的zip文件及其存放位置*/

private String forderDesPath="D://测试文件夹.zip";

/*需要压缩的源文件路径*/

private String fileStrPaht="D://TEMP//基05表.xls";

/*压缩后的zip文件及其存放位置*/

private String fileDesPath="D://测试文件.zip";

private Logger logger=Logger.getLogger(this.getClass().getName());

/**

* 测试文件夹中文环境下压缩

*

*/

@Test

public void testFileZip(){

try{

FileZipHelper.zipCompress(folderSrcPath,forderDesPath);

}catch(Exception e){

logger.error(e);

}

}

/**

* 测试文件中文环境下压缩

*

*/

@Test

public void testFolderZip(){

try{

FileZipHelper.zipCompress(fileStrPaht,fileDesPath);

}catch(Exception e){

logger.error(e);

}

}

}

测试结果如下图所示:

%E6%88%AA%E5%9B%BE00.jpg

此外,还有一种实现中文文件名下的文件压缩的方式——那就是扩展java.util.zip下的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值