• 大小: 19KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-23
  • 语言: Java
  • 标签: zip  解压  java  中文  乱码  

资源简介

可以解决包含中文文件夹的zip包解压的问题 /** * 解压缩zipFile * @param file 要解压的zip文件对象 * @param outputDir 要解压到某个指定的目录下 * @throws IOException */ public void unzip(String zipFileName, String outputDir) throws IOException { try { BufferedOutputStream bos = null; // 创建输入字节流 FileInputStream fis = new FileInputStream(zipFileName); // 根据输入字节流创建输入字符流 BufferedInputStream bis = new BufferedInputStream(fis); // 根据字符流,创建ZIP文件输入流 ZipInputStream zis = new ZipInputStream(bis); // zip文件条目,表示zip文件 ZipEntry entry; // 循环读取文件条目,只要不为空,就进行处理 while ((entry = zis.getNextEntry()) != null) { int count; byte date[] = new byte[2048]; // 如果条目是文件目录,则继续执行 if (entry.isDirectory()) { continue; } else { int begin = zipFileName.lastIndexOf("\\") + 1; int end = zipFileName.lastIndexOf(".") + 1; String zipRealName = zipFileName.substring(begin, end); bos = new BufferedOutputStream(new FileOutputStream(this .getRealFileName(outputDir + "\\" + zipRealName, entry.getName()))); while ((count = zis.read(date)) != -1) { bos.write(date, 0, count); } bos.flush(); bos.close(); } } zis.close(); } catch (Exception e) { e.printStackTrace(); } } private File getRealFileName(String zippath, String absFileName) { String[] dirs = absFileName.split("/", absFileName.length()); // 创建文件对象 File file = new File(zippath); if (dirs.length > 1) { for (int i = 0; i < dirs.length - 1; i++) { // 根据file抽象路径和dir路径字符串创建一个新的file对象,路径为文件的上一个目录 file = new File(file, dirs[i]); } } if (!file.exists()) { file.mkdirs(); } file = new File(file, dirs[dirs.length - 1]); return file; }

资源截图

代码片段和文件信息

package com.originsys.eap.tools;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class CompresszZipFile {

static final int BUFFER = 2048;
/**
 * 读取ZIP文件,只适合于ZIP文件对于RAR文件无效,因为ZIP文件的压缩算法是公开的,而RAR不是
 * @author 彭建明
 * @version 1.0
 * @param zipfilepath:ZIP文件的路径,unzippath:要解压到的文件路径
 */
public void ReadZip(String zipfilepathString unzippath){

try {
BufferedOutputStream bos = null;
//创建输入字节流
FileInputStream fis = new FileInputStream(zipfilepath);
//根据输入字节流创建输入字符流
BufferedInputStream bis = new BufferedInputStream(fis);
//根据字符流,创建ZIP文件输入流
ZipInputStream zis = new ZipInputStream(bis);
//zip文件条目,表示zip文件
ZipEntry entry;
//循环读取文件条目,只要不为空,就进行处理
while((entry=zis.getNextEntry())!=null){
System.out.println(“====“+entry.getName());
int count ;
byte date[] = new byte[BUFFER];
//如果条目是文件目录,则继续执行
if(entry.isDirectory()){
continue;
}else{
int begin = zipfilepath.lastIndexOf(“\\“)+1;
int end = zipfilepath.lastIndexOf(“.“)+1;
String zipRealName = zipfilepath.substring(beginend);
bos = new BufferedOutputStream(new FileOutputStream(this.getRealFileName(unzippath+“\\“+zipRealNameentry.getName())));
while((count=zis.read(date))!=-1){
bos.write(date0count);
}
bos.flush();bos.close();
}
}
zis.close();
} catch (Exception e) {
e.printStackTrace();
}
}

private File getRealFileName(String zippathString absFileName){
String[] dirs = absFileName.split(“/“absFileName.length());
//创建文件对象 
File file = new File(zippath);
if(dirs.length>1){
for(int i=0;i //根据file抽象路径和dir路径字符串创建一个新的file对象,路径为文件的上一个目录
file = new File(filedirs[i]);
}
}
if(!file.exists()){
file.mkdirs();
}
file = new File(filedirs[dirs.length-1]);
return file;
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2351  2010-04-21 11:15  tools\CompresszZipFile.java

     文件      12850  2010-04-21 09:10  tools\Deflater.java

     文件       4702  2010-04-21 09:10  tools\DeflaterOutputStream.java

     文件       8084  2010-04-21 10:02  tools\InflaterInputStream.java

     文件       3156  2010-04-21 08:58  tools\ZipConstants.java

     文件       9349  2010-04-21 10:07  tools\ZipEntry.java

     文件      12115  2010-04-21 10:02  tools\ZipInputStream.java

     文件      15718  2010-04-21 09:09  tools\ZipOutputStream.java

     目录          0  2010-04-22 13:07  tools

----------- ---------  ---------- -----  ----

                68325                    9


评论

共有 条评论