当前位置:首页 > JAVA教程 > 正文内容

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

搜教程4年前 (2019-12-03)JAVA教程164

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网别的相干文章!

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/16349.html

标签: java
分享给朋友:

“java zip紧缩乱码缘由与解决方法引见【JAVA教程】,java” 的相关文章

Java中Thread.start()和Thread.run()之间的区分【JAVA教程】,Java,start(),run()

Java中Thread.start()和Thread.run()之间的区分【JAVA教程】,Java,start(),run()

在Java的多线程观点中,start()和run()是两个最主要的要领。那末它们之间的区分是什么?下面本篇文章就来带人人认识一下start()和run()要领,引见它们之间的区分,愿望对人人有所协助。 Java中的start()要领 线程类的start()要领能够用来启动线程;该要领会在...

java接口和抽象类的引见(代码示例)【JAVA教程】,java

本篇文章给人人带来的内容是关于java接口和笼统类的引见(代码示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。 接口: (1)接口内定义的变量都是public static final范例的,不管是不是显现限制这些修饰符,且必需要被显式初始化,不然报错: publ...

Java多线程之Callable和Future的细致引见(代码示例)【JAVA教程】,多线程,java

本篇文章给人人带来的内容是关于Java多线程之Callable和Future的细致引见(代码示例),有一定的参考价值,有须要的朋侪可以参考一下,愿望对你有所协助。 Callable和Future涌现的缘由 建立线程的2种体式格局,一种是直接继续Thread,别的一种就是完成Runnable接口。...

java基础数据类型的简朴引见【JAVA教程】,java

java基础数据类型的简朴引见【JAVA教程】,java

本篇文章给人人带来的内容是关于java基础数据范例的简朴引见,有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。 基础数据范例 JAVA中一共有八种基础数据范例,他们分别是 byte、short、int、long、float、double、char、boolean 在一般情...

Spring boot集成spring session完成session同享的要领引见【JAVA教程】,Spring boot

本篇文章给人人带来的内容是关于Spring boot集成spring session完成session同享的要领引见,有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。 近来运用spring boot开辟一个体系,nginx做负载平衡分发要求到多个tomcat,此时接见页面会把要求...

java8中predicate的用法引见(代码示例)【JAVA教程】,java

本篇文章给人人带来的内容是关于java8中predicate的用法引见(代码示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。 通报代码 我们首先看一个例子,假定你有一个 Apple 类,它有一个getColor要领,另有一个变量inventory保存着一个Apples的列表...