java unzip zip文件,解析excel包

X497347200 2013-09-17 05:44:58

public static void unZipFile(String dir,String zipfilename) throws ZipException, IOException{
log.debug("unzipfile:"+dir+File.separator+zipfilename);

File file = new File(dir+File.separator+zipfilename);//压缩文件
ZipFile zipFile = new ZipFile(file);//实例化ZipFile,每一个zip压缩文件都可以表示为一个ZipFile
//实例化一个Zip压缩文件的ZipInputStream对象,可以利用该类的getNextEntry()方法依次拿到每一个ZipEntry对象
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));
ZipEntry zipEntry = null;
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
String fileName = zipEntry.getName();
File temp = new File(dir +File.separator+fileName);
if (! temp.getParentFile().exists())
temp.getParentFile().mkdirs();
OutputStream os = new FileOutputStream(temp);
//通过ZipFile的getInputStream方法拿到具体的ZipEntry的输入流
InputStream is = zipFile.getInputStream(zipEntry);
int len = 0;
while ((len = is.read()) != -1)
os.write(len);
os.close();
is.close();
}
zipInputStream.close();
zipFile.close();
log.debug("unzip file over:"+dir+File.separator+zipfilename);
}

这玩意是不是不能解压 多个execel文件压缩的zip
我解析其他文件压缩的zip没问题

多个execel文件压缩的zip,解析就异常

Exception in thread "main" java.lang.IllegalArgumentException
at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:307)
at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:247)
at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:74)
at com.intelcube.olap.utils.IcoZipUtil.main(IcoZipUtil.java:123)


有人知道原因吗
...全文
392 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
X497347200 2013-09-17
  • 打赏
  • 举报
回复
应该是文件编码不是utf8引起的
X497347200 2013-09-17
  • 打赏
  • 举报
回复
异常在这一行 while ((zipEntry = zipInputStream.getNextEntry()) != null) { 其他文件压缩的都可以解,excel压缩的就报错
X497347200 2013-09-17
  • 打赏
  • 举报
回复
有执行

public static void main(String[] a) throws ZipException, IOException{
    	File file = new File("E:\\xiangywWork\\开发任务\\资料\\测试文件\\单价分析表.zip");//压缩文件
    	ZipFile zipFile = new ZipFile(file);//实例化ZipFile,每一个zip压缩文件都可以表示为一个ZipFile
		//实例化一个Zip压缩文件的ZipInputStream对象,可以利用该类的getNextEntry()方法依次拿到每一个ZipEntry对象
		ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file));
		ZipEntry zipEntry = null;
		while ((zipEntry = zipInputStream.getNextEntry()) != null) {
			String fileName = zipEntry.getName();
			File temp = new File("E:\\xiangywWork\\开发任务\\资料\\测试文件\\"+File.separator+fileName);
			if (! temp.getParentFile().exists())
				temp.getParentFile().mkdirs();
			OutputStream os = new FileOutputStream(temp);
			//通过ZipFile的getInputStream方法拿到具体的ZipEntry的输入流
			InputStream is = zipFile.getInputStream(zipEntry);
			int len = 0;
			while ((len = is.read()) != -1)
				os.write(len);
			os.close();
			is.close();
		}
		zipInputStream.close();
		zipFile.close();
	}
无聊找乐 2013-09-17
  • 打赏
  • 举报
回复
你贴的方法有执行吗? 异常的栈里都没有你那方法的名字

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧