读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码
2017-03-15 14:49
471 查看
使用ant.jar进行文件zip压缩
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * 功能: * 1 、实现把指定文件夹下的所有文件压缩为指定文件夹下指定 zip 文件 * 2 、实现把指定文件夹下的 zip 文件解压到指定目录下 */ public class ZipUtils { public static void main(String[] args) { zip ("D:\\zip测试", "D:\\测试结果.zip"); unZip("D:\\测试结果.zip", "D:\\解压结果"); } /** * 功能:把 sourceDir 目录下的所有文件进行 zip 格式的压缩,保存为指定 zip 文件 * @param sourceDir * @param zipFile */ public static void zip(String sourceDir, String zipFile) { OutputStream os; try { os = new FileOutputStream(zipFile); BufferedOutputStream bos = new BufferedOutputStream(os); ZipOutputStream zos = new ZipOutputStream(bos); File file = new File(sourceDir); String basePath = null; if (file.isDirectory()) { basePath = file.getPath(); } else {//直接压缩单个文件时,取父目录 basePath = file.getParent(); } zipFile(file, basePath, zos); zos.closeEntry(); zos.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 功能:执行文件压缩成zip文件 * @param source * @param basePath 待压缩文件根目录 * @param zos */ private static void zipFile(File source, String basePath, ZipOutputStream zos) { File[] files = new File[0]; if (source.isDirectory()) { files = source.listFiles(); } else { files = new File[1]; files[0] = source; } String pathName;//存相对路径(相对于待压缩的根目录) byte[] buf = new byte[1024]; int length = 0; try { for (File file : files) { if (file.isDirectory()) { pathName = file.getPath().substring(basePath.length() + 1) + "/"; zos.putNextEntry(new ZipEntry(pathName)); zipFile(file, basePath, zos); } else { pathName = file.getPath().substring(basePath.length() + 1); InputStream is = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(is); zos.putNextEntry(new ZipEntry(pathName)); while ((length = bis.read(buf)) > 0) { zos.write(buf, 0, length); } is.close(); } } } catch (Exception e) { e.printStackTrace(); } } /** * 功能:解压 zip 文件,只能解压 zip 文件 * @param zipfile * @param destDir */ public static void unZip(String zipfile, String destDir) { destDir = destDir.endsWith("\\") ? destDir : destDir + "\\"; byte b[] = new byte[1024]; int length; ZipFile zipFile; try { zipFile = new ZipFile(new File(zipfile)); Enumeration enumeration = zipFile.getEntries(); ZipEntry zipEntry = null; while (enumeration.hasMoreElements()) { zipEntry = (ZipEntry) enumeration.nextElement(); File loadFile = new File(destDir + zipEntry.getName()); if (zipEntry.isDirectory()) { loadFile.mkdirs(); } else { if (!loadFile.getParentFile().exists()){ loadFile.getParentFile().mkdirs(); } OutputStream outputStream = new FileOutputStream(loadFile); InputStream inputStream = zipFile.getInputStream(zipEntry); while ((length = inputStream.read(b)) > 0) outputStream.write(b, 0, length); } } } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- 读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码(支付宝对账单为例)
- 解决Java原生压缩组件不支持中文文件名乱码的问题
- ios中Mini zip开源工程ZipArchive,压缩中文文件名乱码问题【解决】
- 使Serv-U支持中文目录名中文文件名并解决中文乱码
- 解决Android4.3版本下,手机短彩接收中文文件名附件,中文名字的附件无法保存(第二步:解决从从数据库中读取附件文件名,并在长按后保存附件时,中文乱码导致的无法保存附件)
- [Java代码]Java中压缩与解压--中文文件名乱码解决办法
- 工作总结11 压缩文件里面的中文文件名读取乱码问题解决方案
- Java中ZIP压缩与解压--中文文件名乱码解决办法
- java压缩zip文件中文乱码问题解决方法
- Java中压缩与解压--中文文件名乱码解决办法
- 用c#读取文件内容中文是乱码的解决方法:
- 使Serv-U支持中文目录名中文文件名并解决中文乱码
- Java中压缩与解压--中文文件名乱码解决办法
- cocos2d-x:读取指定目录下的文件名+解决中文乱码(win32下有效)
- 解决windows传送到linux下中文文件名及文件内容乱码问题
- 【JDK ZipEntry压缩中文文件名乱码解决】
- ServU7不支持中文名的解决办法(Serv-U中文目录和文件名变乱码问题)
- Java中ZIP压缩与解压--中文文件名乱码解决办法
- Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
- ubuntu下解决解压zip文件中文文件名乱码问题