旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

java zip紧缩乱码缘由与解决方法引见【JAVA教程】,java

作者:搜教程发布时间:2019-12-03分类:JAVA教程浏览:57评论:0


导读:javazip紧缩乱码的缘由与处理方法:(引荐:java视频教程)运转环境Jdk1.5,win7中文版JDK1.5中有zip紧缩相干的API,在java....

java zip紧缩乱码的缘由与处理方法:(引荐:java视频教程)

运转环境

Jdk 1.5,win 7中文版

JDK1.5中有zip紧缩相干的API,在java.util.zip包下面。一般情况下,运用JDK自带的API把目次(文件)紧缩成zip包,步骤以下:

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(file));
Out.putNextEntry(new ZipEntry(entryName));
//If entry is directory
//above codes are enough
//else if entry is file
//then the codes below is needed
FileInputStream in = new FileInputStream(infile);
byte[] bs = newbyte[1024];
int b = 0;
while((b = in.read(bs)) != -1) {
zos.write(bs, 0, b);
}
in.close();

假如要打包的目次名或文件名中包括中文字符,这些目次或文件的称号就会涌现乱码,缘由是JDK自带的API中,在写入ZipEntry的时刻,采纳的编码默许的是UTF8(貌似还只有这一种,没办法变动,听说Java7有所改善),而win7操作系统中文版在处置惩罚zip文件的时刻采纳的是GBK编码,编码和解码的处置惩罚差别,造成了打包以后的文件在win7中文版中看到的是乱码。

能够采纳的处理方案是经由过程应用第三方API完成zip紧缩,以处理中文乱码问题。以下是应用apache的compress的zip紧缩的完成,所需jar包为commons-compress-1.2.jar

ArchiveOutputStream os = new ArchiveStreamFactory()
              .createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);
if(os instanceof ZipArchiveOutputStream) {
((ZipArchiveOutputStream) os).setEncoding("GBK");
}
//...some code omitted
os.putArchiveEntry(new ZipArchiveEntry(path+"/"+file.getName()));
IOUtils.copy(new FileInputStream(file), os);
os.closeArchiveEntry();

更多java学问请关注java基础教程栏目。

以上就是java zip紧缩乱码缘由与处理方法引见的细致内容,更多请关注ki4网别的相干文章!

标签:java


欢迎 发表评论: