Java课程设计笔记-用org.apache.tools.zip中的类压缩/解压zip文件
2015-12-02 19:01
399 查看
本来想装一发逼用zlib库的……结果没找到怎么用zlib库以流的形式压缩/解压多个文件,跪了……先用Java实现这个功能吧
用java.util.zip包中的工具类解压/压缩的时候遇到点问题,文件名是中文的时候会抛出异常……于是改成用org.apache.tools.zip中的类
代码:
用java.util.zip包中的工具类解压/压缩的时候遇到点问题,文件名是中文的时候会抛出异常……于是改成用org.apache.tools.zip中的类
代码:
import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; 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.ArrayList; import java.util.Enumeration; public class ZipUtil { public static int zip(ArrayList<File> files, File targetFile) throws IOException { int zipped = 0; if(!targetFile.exists()){ targetFile.createNewFile(); } ZipOutputStream out = new ZipOutputStream(new FileOutputStream(targetFile)); for(File i : files) { zip("", i, out); zipped++; } out.close(); return zipped; } private static void zip(String entry, File file, ZipOutputStream out) throws IOException { if(!(file.canRead() && file.exists())) { throw new IOException(); } if(file.isDirectory()) { String nextEntry = entry + file.getName() + File.separator; ZipEntry e = new ZipEntry(nextEntry); out.putNextEntry(new ZipEntry(nextEntry)); File[] files = file.listFiles(); if(files == null){ throw new IOException(); } for(File i : files) { zip(nextEntry, i, out); } } else { if(!(file.exists() && file.canRead())){ throw new IOException("input file does not exist or cannot read"); } out.putNextEntry(new ZipEntry(entry + file.getName())); InputStream input = new FileInputStream(file); int tmp; while(-1 != (tmp = input.read())){ out.write(tmp); } input.close(); } } public static void unZip(File inputFile, File targetDirectory) throws IOException, IllegalArgumentException{ if(targetDirectory.exists() && (!targetDirectory.isDirectory())) { throw new IllegalArgumentException("target directory should be a directory"); } ZipFile zipFile = new ZipFile(inputFile); Enumeration<ZipEntry> entries = zipFile.getEntries(); InputStream inputStream = null; FileOutputStream fileOutputStream = null; while(entries.hasMoreElements()) { ZipEntry zipEntry = entries.nextElement(); System.out.println(zipEntry.getName() + " " + zipEntry.isDirectory()); if(zipEntry.isDirectory()) { File dir = new File(targetDirectory.getAbsolutePath() + File.separator + zipEntry.getName()); dir.mkdirs(); } else { File file = new File(targetDirectory.getAbsolutePath() + File.separator + zipEntry.getName()); File parentDir = file.getParentFile(); file.createNewFile(); InputStream input = zipFile.getInputStream(zipEntry); OutputStream output = new FileOutputStream(file); int temp; while(-1 != (temp = input.read())){ output.write(temp); } input.close(); output.close(); } } } }
相关文章推荐
- apache与weblogic 的整合
- 新手福利:Apache Spark 入门攻略
- 关掉apache2服务器日志文件
- java.lang.ClassNotFoundException: org.apache.lucene.store.Directory
- Apache Commons-SCXML系列之Demo:"请假流程"
- 修改apache2的监听端口
- apache htaccess
- hadoop2.6 & apache-hive-1.2.1-bin & pig-0.15.0 因jline不兼容
- 使用Apache Commons Exec管理进程
- apache与nmon监控服务器
- ubuntu curl upload file to apache2 server
- Apache POI
- Apache禁止解析PHP
- 转载:Apache Mina 入门实例
- ApacheTiles实战
- 重要开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
- 使用Apache Tiles3.x构建界面布局
- Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service
- jetty部署出现org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JD
- Apache的IP访问控制