压缩文件中文乱码问题

qingkong 发布于 2014/01/19 21:22
阅读 454
收藏 0

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

package edu.bupt.isc.als.parser;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


import org.apache.tools.zip.ZipFile;










public class zipTest {


List<String> fileList;
//    private static final String OUTPUT_ZIP_FILE = "D:\\testResult\\ws.zip";
//    private static final String SOURCE_FOLDER = "D:\\testResult\\ApiDemo.apk";


zipTest(){
fileList = new ArrayList<String>();
}


/**
* Zip it
* @param zipFile output ZIP file location
*/
public void zipIt(String zipFile,String source){
byte[] buffer = new byte[1024];

try{
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
System.out.println("Output to Zip : " + zipFile);
for(String file : this.fileList){
System.out.println("File Added : " + file);
String file1 = file.substring(file.lastIndexOf('\\'));
ZipEntry ze= new ZipEntry(file1);
zos.putNextEntry(ze);
FileInputStream in = 
new FileInputStream(file);
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
in.close();
}
zos.closeEntry();
//remember close it
zos.close();
System.out.println("Done");
}catch(IOException ex){
ex.printStackTrace();   
}
}


/**
* Traverse a directory and get all files,
* and add the file into fileList  
* @param node file or directory
*/
public void generateFileList(File node){
//add file only
if(node.isFile()){
// fileList.add(generateZipEntry(node.getAbsoluteFile().toString(),source));
fileList.add(node.getAbsoluteFile().toString());//所有文件的绝对路径
}
if(node.isDirectory()){
String[] subNote = node.list();
for(String filename : subNote){
generateFileList(new File(node, filename));
}
}
}


/**
* Format the file path for zip
* @param file file path
* @return Formatted file path
*/
// private String generateZipEntry(String file,String source){//
// return file.substring(source.length()+1, file.length());
// }    


public static void FileZip( String source,String out )
{
System.out.println("start to zip... ");
System.out.println(source);
zipTest appZip = new zipTest();
appZip.generateFileList(new File(source));
appZip.zipIt(out,source);
}


public static void main(String[] args)
{
FileZip("D:\\testResult\\KingReader.apk","D:\\testResult\\kr.zip");
}
}


这段代码是对文件夹中所有文件打包,但是中文的文件会被压缩成乱码,加压之后得不到,怎么破?

加载中
0
蔡佳娃
蔡佳娃
据说,jdk自带的zip压缩对中文的支持不是很好,可以考虑其他的第三方压缩包。
0
qingkong
qingkong
我用了第三方的truezip.jar,解决了乱码的问题,但是它把我原来子文件夹下的各文件都放在了zip包的第一层下,如何是好哇~~~
0
281165273
281165273

把new ZipEntry的参数带上原有的路径就行了吧

0
蔡佳娃
蔡佳娃
每一个待压缩的文件都是一个类似zipentry的对象,你在构造的时候把路径带上就好了
0
yuyuyuyu
yuyuyuyu
可以考虑ant的包
0
大飞哥2099
大飞哥2099
用apache的zip包吧,没有该问题
0
double9
double9

一楼给出了原因,五楼给出了解决方法。

楼主结贴!!!

0
小小志
小小志
楼主用apache的包
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部