java解压和压缩zip文件
2017-12-22 10:33
393 查看
1.导入jar包
在pom文件中增加如下:
2.建立一个utils专门处理解压和压缩这类文件
使用上面这个类,就基本上能够全部完成了。
3.使用方法
把各种地址和文件命名传进去就可以了~
在pom文件中增加如下:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.15</version> </dependency>
2.建立一个utils专门处理解压和压缩这类文件
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.ArrayList; import java.util.List; import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.zip.Zip64Mode; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; public class ZipUtils { /** * zip压缩文件 * @param dir * @param zippath */ public static void zip(String dir ,String zippath){ List<String> paths = getFiles(dir); compressFilesZip(paths.toArray(new String[paths.size()]),zippath,dir ); } /** * 递归取到当前目录所有文件 * @param dir * @return */ public static List<String> getFiles(String dir){ List<String> lstFiles = null; if(lstFiles == null){ lstFiles = new ArrayList<String>(); } File file = new File(dir); File [] files = file.listFiles(); for(File f : files){ if(f.isDirectory()){ lstFiles.add(f.getAbsolutePath()); lstFiles.addAll(getFiles(f.getAbsolutePath())); }else{ String str =f.getAbsolutePath(); lstFiles.add(str); } } return lstFiles; } /** * 文件名处理 * @param dir * @param path * @return */ public static String getFilePathName(String dir,String path){ String p = path.replace(dir+File.separator, ""); p = p.replace("\\", "/"); return p; } /** * 把文件压缩成zip格式 * @param files 需要压缩的文件 * @param zipFilePath 压缩后的zip文件路径 ,如"D:/test/aa.zip"; */ public static void compressFilesZip(String[] files,String zipFilePath,String dir) { if(files == null || files.length <= 0) { return ; } ZipArchiveOutputStream zaos = null; try { File zipFile = new File(zipFilePath); zaos = new ZipArchiveOutputStream(zipFile); zaos.setUseZip64(Zip64Mode.AsNeeded); //将每个文件用ZipArchiveEntry封装 //再用ZipArchiveOutputStream写到压缩文件中 for(String strfile : files) { File file = new File(strfile); if(file != null) { String name = getFilePathName(dir,strfile); ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(file,name); zaos.putArchiveEntry(zipArchiveEntry); if(file.isDirectory()){ continue; } InputStream is = null; try { is = new BufferedInputStream(new FileInputStream(file)); byte[] buffer = new byte[1024 ]; int len = -1; while((len = is.read(buffer)) != -1) { //把缓冲区的字节写入到ZipArchiveEntry zaos.write(buffer, 0, len); } zaos.closeArchiveEntry(); }catch(Exception e) { throw new RuntimeException(e); }finally { if(is != null) is.close(); } } } zaos.finish(); }catch(Exception e){ throw new RuntimeException(e); }finally { try { if(zaos != null) { zaos.close(); } } catch (IOException e) { throw new RuntimeException(e); } } } /** * 把zip文件解压到指定的文件夹 * @param zipFilePath zip文件路径, 如 "D:/test/aa.zip" * @param saveFileDir 解压后的文件存放路径, 如"D:/test/" () */ public static void unzip(String zipFilePath, String saveFileDir) { if(!saveFileDir.endsWith("\\") && !saveFileDir.endsWith("/") ){ saveFileDir += File.separator; } File dir = new File(saveFileDir); if(!dir.exists()){ dir.mkdirs(); } File file = new File(zipFilePath); if (file.exists()) { InputStream is = null; ZipArchiveInputStream zais = null; try { is = new FileInputStream(file); zais = new ZipArchiveInputStream(is); ArchiveEntry archiveEntry = null; while ((archiveEntry = zais.getNextEntry()) != null) { // 获取文件名 String entryFileName = archiveEntry.getName(); // 构造解压出来的文件存放路径 String entryFilePath = saveFileDir + entryFileName; OutputStream os = null; try { // 把解压出来的文件写到指定路径 File entryFile = new File(entryFilePath); if(entryFileName.endsWith("/")){ entryFile.mkdirs(); }else{ os = new BufferedOutputStream(new FileOutputStream( entryFile)); byte[] buffer = new byte[1024 ]; int len = -1; while((len = zais.read(buffer)) != -1) { os.write(buffer, 0, len); } } } catch (IOException e) { throw new IOException(e); } finally { if (os != null) { os.flush(); os.close(); } } } } catch (Exception e) { throw new RuntimeException(e); } finally { try { if (zais != null) { zais.close(); } if (is != null) { is.close(); } } catch (IOException e) { throw new RuntimeException(e); } } } } }
使用上面这个类,就基本上能够全部完成了。
3.使用方法
private void toPutJSCSS(Long template_id,Integer material_id) { String catalog = material_id+""; String saveFileDir = materialHtml+"/"+catalog; String zipFilePath = templatePath+template_id+".zip"; ZipUtils.unzip(zipFilePath, saveFileDir); }
把各种地址和文件命名传进去就可以了~
相关文章推荐
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- java-在Java中操作Zip文件,压缩/解压
- java 压缩解压zip文件--使用ant支持中文
- java应用压缩、解压zip文件
- Java 压缩,解压zip文件(支持中文)
- Java 解压和压缩密码zip文件
- Java压缩、解压zip文件(依赖第三方类库zip4j_1.3.1.jar)
- java Zip文件的压缩与解压, 兼容Windows和Linux
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- Java 基于java.util.zip类压缩解压Zip文件
- Java压缩解压zip文件的中文文件名在Windows和Linux环境下乱码问题的解决方案
- 使用java解压或者压缩zip文件
- Java解压和压缩带密码的zip文件(转…
- java解压缩zip文件,java创建zip文件,java压缩文件,java解压文件,用到ant.jar解决汉字乱码
- Java 基于java.util.zip类压缩解压Zip文件
- java压缩解压ZIP文件
- JAVA压缩解压ZIP文件,中文乱码还需要ANT.JAR包
- Java实现Zip文件的解压和压缩_ZipUtil
- Java解压和压缩带密码的zip文件
- Java 基于java.util.zip类压缩解压Zip文件