- 浏览: 397606 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (139)
- java (39)
- linux (9)
- hibernate (2)
- Spring (10)
- Struts2 (1)
- Ext (38)
- Ext + Java (5)
- Oracle (5)
- JavaScript (15)
- 开发工具 (3)
- ajax (2)
- WebSerivice+Spring (2)
- WebService+CXF (2)
- 服务器 (4)
- MQ (1)
- Apache (3)
- axis (3)
- myeclipse,maven (2)
- WebService (4)
- web (11)
- httpinvoke (1)
- 多线程 (3)
- 同步 (1)
- Servlet (2)
- css (2)
- div (2)
- html (1)
- file (2)
- 应用软件 (1)
- myEclipse10 (1)
- mysql (2)
- Extjs4 (2)
- JavaScript css (1)
- mongodb (2)
- socket (6)
- 流媒体 (5)
- 语音技术 (5)
- freeswitch (1)
最新评论
-
白天看黑夜:
Apache Mina Server 2.0 中文参考手册(带 ...
Apache Mina 学习 -
stduPanda:
引用引用[自行车在现场咨询quote]引用引用引用引用引用引用 ...
Errors running builder 'DeploymentBuilder' on project '工程名' -
鱼翔空:
maven3 导入报Plugin execution not ...
CXF自动生成wsdl与xsd文件 -
哈哈哥_Supper:
closeAction:'hide',
Extjs4 tabPanel关闭后打开 cannot read property addcls of null -
哈哈哥_Supper:
var tab1 = tabPanel.add(
...
Extjs4 tabPanel关闭后打开 cannot read property addcls of null
在解析zip文件时,由于默认版本不支持中文目录,导致解析时遇到中文文件目录会出现乱码:
从网上找到一些资料,自己写了个样例。有兴趣的可以看看。(需要修改原有的zip包,添加构造方法,支持gbk编码)
具体修改class为 ZipinputStream和ZipOutputStream(代码见附件中)
见下方压缩与解析代码:
package ziphandle;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import zip.ZipEntry;
import zip.ZipInputStream;
import zip.ZipOutputStream;
@Transactional
@Component
public class FileHandle {
public static void zip(File outZipPath, File zipFileRoot) {
try {
// filePath.
OutputStream os = new FileOutputStream(outZipPath);
BufferedOutputStream bos = new BufferedOutputStream(os);
ZipOutputStream zip = new ZipOutputStream(bos, "GBK");
zip(zip, zipFileRoot, "");
zip.flush();
zip.closeEntry();
zip.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 写入文件目录与文件内容
*/
private static void zip(ZipOutputStream out, File f, String base) throws Exception {
System.out.println("Zipping " + f.getName());
if (f.isDirectory()) {
File[] fl = f.listFiles();
// base = new String(base.getBytes(), "GBK");
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName());
}
} else if (!f.getName().endsWith(".zip")) {
// base = new String(base.getBytes(), "GBK");
out.putNextEntry(new ZipEntry(base));
BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
byte[] bt = new byte[1024];
int b;
while ((b = in.read(bt)) != -1) {
out.write(bt, 0, b);
}
in.close();
}
}
@Transactional
public void unzip(String zipFileName) throws Exception {
ZipInputStream in = null;
try {
in = new ZipInputStream(new FileInputStream(zipFileName), "gbk");
ZipEntry z;
int totalCount = 0;
while ((z = in.getNextEntry()) != null) {
if (z.isDirectory()) {
String name = z.getName();
if (StringUtils.isNotBlank(name)) {
System.out.println("目录:" + name);
int index = name.lastIndexOf("/");
String currentName = null;
String parentName = null;
if (index != -1) {
currentName = name.substring(index + 1, name.length());
parentName = name.substring(0, index);
} else {
currentName = name;
}
currentName = currentName.substring(0, name.length() - 1); //去掉斜线
System.out.println("输出目录名称:"+currentName);
}
} else {
String name = z.getName();
System.out.println("文件名:" + name);
if (StringUtils.isNotBlank(name)) {
String currentName = null;
String parentName = null;
int index = name.lastIndexOf("/");
if (index != -1) {
currentName = name.substring(index + 1, name.length());
parentName = name.substring(0, index);
} else {
currentName = name;
}
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String b;
int row = 0;
while ((b = br.readLine()) != null) {
totalCount++;
row++;
System.out.println("读出文件内容:"+b); //打出读取的内容
}
System.out.println("读取文件 " + currentName + " 结束");
}
}
}
} catch (Exception e) {
throw e;
} finally {
in.close();
File tempFile = new File(zipFileName);
tempFile.delete();
tempFile.deleteOnExit();
}
}
public static void main(String[] args) {
try {
// OutputStream os = new FileOutputStream(new File("D:/中文new.zip"));
// BufferedOutputStream bos = new BufferedOutputStream(os);
// ZipOutputStream zip = new ZipOutputStream(bos, "GBK");
// zip(zip, new File("D://中文"), "");
// zip.flush();
// zip.closeEntry();
// zip.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- zip.zip (14.3 KB)
- 下载次数: 6
发表评论
-
linux下查找java进程占用CPU过高原因
2018-04-03 12:35 7971. 查找进程 top查看进程占用资源情况 ... -
Apache Mina TCP/UDP功能使用说明
2017-03-14 14:18 1773Apache Mina ... -
WebService CXF客户端调用样例
2013-01-04 14:48 2063如果服务端提供jar包,客户端直接引用jar ... -
ExtJS layout的9种样式风格总结
2012-12-18 10:29 1120文章转载自:http://virgoooos.iteye.co ... -
正则表达式详解
2012-10-09 15:13 956转载自:http://edu.yesky.com/ ... -
map 排序
2012-09-28 10:44 1190用于map的值排序的方法,修改SortedSet 的方法即 ... -
java读写txt文件
2012-09-19 18:49 30028import java.io.BufferedReader; ... -
UTF-8 的bom格式处理
2012-09-14 11:54 1685一般通过httpcient请求的内容,有可能返回utf- ... -
java获取当前工程目录
2012-08-23 17:41 1684转载自:http://blog.csdn.net/yan ... -
用sax解析xml文件把读取的内容写入txt
2012-08-17 10:07 2207import java.io.BufferedWrite ... -
div+css实现圆角聊天框
2012-08-14 15:50 4825需要做个聊天样式的对话框,找了半天,终于找到一个比较好的样式, ... -
linux 启动oracle
2012-07-24 10:58 1056转载:http://www.cnitb ... -
java写excel03文件
2012-07-18 00:06 997用java jxl写入excel03文件,下面给出一个简 ... -
JSP页面查询显示常用模式
2012-07-16 21:09 1248全文转载自:http://pharaohsprinc ... -
Servlet调用Spring bean
2012-07-13 16:30 1719servlet中直接调用spring时会出现Nullpo ... -
Json
2012-07-11 11:25 1109原文转载自:http://www.cnblogs.com ... -
java常用英语词汇翻译
2012-06-04 14:07 2488<java常用英语词汇>abstract 抽象的 ... -
JAVA垃圾回收分析&& java虚拟机垃圾回收机制
2012-06-04 11:11 1260JAVA垃圾回收分析&&a ... -
原子变量(AtomicLong, AtomicInteger, AtomicReference)
2012-05-30 11:49 1779原文转载:http://meng ... -
java读写txt文件
2012-05-20 19:55 52本文转载自:http://www.blogjava.ne ...
相关推荐
本资源提供的"将一个目录内的内容打包到zip文件以及将zip文件解压到某个目录(ZipPack).zip"是一个Windows下的C++实现,它利用了zlib库来处理zip文件的相关操作。下面将详细阐述涉及的知识点。 1. **C++编程语言**:...
ZIP文件通常包含一个中央目录,存储了所有压缩文件的元数据,如文件名、时间戳、压缩方法以及在ZIP文件内的位置。此外,每个文件的压缩数据分布在文件的前面部分。 1. **读取ZIP文件头**:解压过程的第一步是识别...
Zip文件目录遍历漏洞是一种常见的安全问题,主要发生在处理或解析ZIP格式的压缩文件时。在本Demo中,我们将深入探讨这种漏洞的本质、其产生的原因以及如何防范。 ZIP是一种广泛使用的文件压缩格式,它允许用户将多...
对于支持中文文件名,这些库通常已经处理了Unicode编码,以确保正确解析非ASCII字符,包括中文。 在读取ZIP文件时,我们首先需要打开ZIP文件并创建一个ZIP文件对象。然后,通过迭代这个对象,我们可以访问每个条目...
本项目聚焦于使用C++来处理文件操作,具体包括解压ZIP文件和复制文件到另一目录。以下是对这些知识点的详细说明: 1. **解压ZIP文件**: ZIP是一种常见的文件压缩格式,它允许将多个文件和目录打包成一个单一的可...
在这个场景中,ANTLR可能被用来解析ZIP文件的内容,以便进一步处理其中的文本文件。 `cpdetector-1.08.jar` 是Character Profile Detector的实现,它是一个Java库,专门用于检测文本文件的字符编码。这个库提供了...
本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip.ZipFile`类来实现解压功能。在实际应用中,这种方法非常实用...
在这里,`lt_files_info`会包含ZIP文件内的所有文件信息,包括文件名和数据。 然后,将ZIP文件内容解析到内表,我们可以遍历`lt_files_info`,读取每个文件的内容,并将其转换为字符格式存储到内表中。例如: ```...
本文将详细探讨如何使用纯JavaScript在前端解析Excel文件,不依赖后端服务,且兼容各大主流浏览器。我们将主要关注以下几个关键知识点: 1. **Excel文件格式**: Excel文件通常以`.xlsx`为扩展名,采用OpenXML标准...
4. **解析Zip文件**:使用库提供的API,可以读取Zip文件的中央目录,获取所有文件的信息,然后根据需要解压特定文件。这可能涉及到二进制数据的处理,如使用`ByteArray`对象来存储和操作文件数据。 5. **压缩和写入...
凯立德2012配置文件解析与参考.exe很可能是提供这类教程或工具的可执行文件,它可能包括配置文件的详细说明、修改指南、示例和实用工具。通过运行这个程序,用户可以系统地学习和实践配置文件的解析和应用,从而更好...
- Zip文件中的文件路径可能包含相对路径,处理时需要正确解析和构建完整的文件路径。 - 文件编码问题,某些文本文件可能需要根据编码类型(如UTF-8)进行解码。 - 对于大文件,可能需要考虑分块读取,以避免一次...
在本案例中,提供的压缩包 "poi.zip" 包含了两个子文件:poi-bin-4.1.0-20190412.zip 和 poi-src-4.1.0-20190412.zip。 **Apache POI 概述** Apache POI 是 Apache 软件基金会的一个项目,它提供了一个 Java API,...
基于C#开发的STEP文件解析器完整源码+项目说明(毕设项目).zip 【资源介绍】 此项目是本人的毕业设计的研究课题,旨在实现一个STEP解析器,预期功能如下: 解析STEP文件,识别出各组成元素的类型、详细信息,以及元素...
"凯立德配置文件解析与参考V5.0.zip" 是一个针对凯立德导航系统配置文件的解析工具和参考资料的压缩包,主要针对的是2012年的版本。这个压缩包中包含了两个文件,一个是执行程序"凯立德2012配置文件解析与参考.exe...
在上述代码中,我们创建了一个`ZipInputStream`实例,传入ZIP文件路径和UTF-8编码,确保文件名可以正确解析。然后,遍历ZIP文件中的每个条目,根据条目是否为目录创建相应的文件或目录,同时使用UTF-8编码创建文件名...
1. iOS的HFS+文件系统基础,包括文件和目录结构。 2. iOS的沙盒机制,如何保护用户数据和应用间的隔离。 3. 文件系统的安全性,如读写权限和数据加密。 4. 应用如Pages如何与文件系统交互,处理文档的存储和访问。 5...
一旦你有了`ZipFile`对象,你可以通过`entries()`方法获取一个`Enumeration<ZipEntry>`,它包含ZIP文件中的所有条目(即文件和目录)。`ZipEntry`对象提供了关于ZIP条目的详细信息,如名称、大小、时间戳等。 ```...
解压ZIP文件的过程是将压缩包中的文件恢复到原始状态,以便用户可以访问其中包含的文件和目录结构。通常,解压过程会涉及到读取ZIP文件头信息、提取压缩数据并将其写入磁盘等步骤。 ### Java中解压ZIP文件的方法 ...