利用Java实现zip压缩与解压缩【青鸟资源分享】
JavaZIP压缩和解压缩文件(解决中文文件名乱码问题)
JavaZIP压缩和解压缩⽂件(解决中⽂⽂件名乱码问题)JDK中⾃带的ZipOutputStream在压缩⽂件时,如果⽂件名中有中⽂,则压缩后的zip⽂件打开时发现中⽂⽂件名变成乱码.解决的⽅法是使⽤apache-ant-zip.jar包(见附件)中的ZipOutputStream和ZipEntry.即,导⼊类:import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;并且注意,压缩之前调⽤ZipOutputStream的out.setEncoding(System.getProperty("sun.jnu.encoding"));⽅法,系统参数sun.jnu.encoding表⽰获取当前系统中的⽂件名的编码⽅式.这⾥将ZipOutputStream的⽂件名编码⽅式设置成系统的⽂件名编码⽅式.解压时,直接使⽤JDK原来的ZipInputStream即可.但是有个需要注意的地⽅是,在读取ZIP⽂件之前,需要设置:System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding"));将系统的ZIP编码格式设置为系统⽂件名编码⽅式,否则解压时报异常.import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;改为import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;ant包⾥提供ZipOutputStream类的setEncoding("gbk")⽅法。
zos.setEncoding("gbk");。
利用java实现zip的压缩和解压
menuitem neww= new menuitem("new");
neww.addactionlistener(this);
file.add(neww);
menuitem open=new menuitem("open");
open.addactionlistener(this);
dispose();∥关闭窗口
system.exit(0);∥关闭程序
}
else {
system.out.println("no this command!");
}
}
}
if ("new".equals(arg)) randomdata();
else if ("open".equals(arg)) openfile();
else if ("save".equals(arg)) savefile();
else if ("exit".equals(arg)){
∥用zip输入流构建datainputstream
doc=dis.readutf();∥读取文件内容
dis.close();∥关闭文件
doczipsize = f.length();∥获取zip文件长度
showtextandinfo();∥显示数据
exit.addactionlistener(this);
file.add(exit);
∥随机生成的数据文件的多行文本显示域
add("center",textarea = new textarea());
用Java进行zip文件压缩与解压缩
⽤Java进⾏zip⽂件压缩与解压缩可能存在的业务情况:1、⽤户上传了压缩包,需校验压缩包中的⽂件是否合格。
2、⽤户上传压缩包,对压缩包中的⽂件进⾏批量⽔印处理解决思路:1、读取原压缩包⽂件,解压缩⾄临时⽬录2、对临时⽬录中的解压缩⽂件进⾏校验/⽔印处理3、对临时⽬录中处理过的⽂件进⾏压缩4、删除临时⽬录及其下的⽂件需要参考前⾯的校验PDF的帖⼦测试结果如下:测试代码:@Testpublic void testZip() {String filePath = "D:\\pdfTest\\合格压缩⽂件.zip";// 获取原⽂所在⽬录// 服务器上时,⽂件路径为“/”,此处测试需要换成filePath中的“\\”//String oldFilePath = filePath.substring(0, stIndexOf("/"));String oldFilePath = filePath.substring(0, stIndexOf("\\"));System.out.println("原⽂件路径:" + oldFilePath);// 临时⽬录,原压缩⽂件解压⽬录String destDirPath = oldFilePath + "\\tmp\\";System.out.println("临时路径:" + destDirPath);// 将原压缩⽂件解压到临时⽬录ZipUtil.unzipFile(filePath, destDirPath);// 临时⽬录⽂件对象File destDir = new File(destDirPath);// 获取临时⽬录下的所有⽂件File[] files = destDir.listFiles();// 定义变量,保存校验结果List<Integer> list = new ArrayList<>();// 遍历⽂件,进⾏校验for (File file: files) {String absolutePath = file.getAbsolutePath();System.out.println(absolutePath);int i = CheckPdfHelper.checkPdf(absolutePath);list.add(i);// 压缩包中存在不合格PDF⽂件时if (i != 0) {break;}}// 判断是否包含不合格PDF⽂件if (list.contains(1)) {System.out.println("压缩⽂件中包含不合格PDF⽂件");// 删除解压缩的⽂件和临时⽬录ZipUtil.deletefile(destDirPath);// 不合格时,不⽣成新的压缩包⽂件return;} else {System.out.println("压缩⽂件PDF⽂件均符合要求");}// 获取原压缩⽂件后缀int pos = stIndexOf('.');String suffix = filePath.substring(pos + 1);// 新⽣成压缩⽂件路径String newFilePath = filePath.substring(0, pos) + ".PSW." + suffix;System.out.println("新的压缩⽂件路径:" + newFilePath);// 将检验成功的⽂件压缩成⼀个新的压缩包ZipUtil.zipFile(newFilePath, files);// 删除临时⽬录ZipUtil.deletefile(destDirPath);}ZipUtil⼯具类:package com.alphajuns.util;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;/*** @ClassName ZipUtil* @Description 压缩或解压缩zip:由于直接使⽤java.util.zip⼯具包下的类,会出现中⽂乱码问题,所以使⽤ant.jar中的org.apache.tools.zip下的⼯具类 * @Author AlphaJunS* @Date 2020/3/8 11:30* @Version 1.0*/public class ZipUtil {/*** @Author AlphaJunS* @Date 11:32 2020/3/8* @Description* @param zip 压缩⽬的地址* @param srcFiles 压缩的源⽂件* @return void*/public static void zipFile( String zip , File[] srcFiles ) {try {if( zip.endsWith(".zip") || zip.endsWith(".ZIP") ){FileOutputStream fos = new FileOutputStream(new File(zip));ZipOutputStream _zipOut = new ZipOutputStream(fos) ;_zipOut.setEncoding("GBK");for( File _f : srcFiles ){handlerFile(zip , _zipOut , _f , "");}fos.close();_zipOut.close();}else{System.out.println("target file[" + zip + "] is not .zip type file");}} catch (FileNotFoundException e) {} catch (IOException e) {}}/*** @Author AlphaJunS* @Date 11:33 2020/3/8* @Description* @param zip 压缩的⽬的地址* @param zipOut* @param srcFile 被压缩的⽂件信息* @param path 在zip中的相对路径* @return void*/private static void handlerFile(String zip , ZipOutputStream zipOut , File srcFile , String path) throws IOException {System.out.println(" begin to compression file[" + srcFile.getName() + "]");if( !"".equals(path) && ! path.endsWith(File.separator)){path += File.separator ;}if( ! srcFile.getPath().equals(zip) ){if( srcFile.isDirectory() ){File[] _files = srcFile.listFiles() ;if( _files.length == 0 ){zipOut.putNextEntry(new ZipEntry( path + srcFile.getName() + File.separator)); zipOut.closeEntry();}else{for( File _f : _files ){handlerFile( zip ,zipOut , _f , path + srcFile.getName() );}}}else{InputStream _in = new FileInputStream(srcFile) ;zipOut.putNextEntry(new ZipEntry(path + srcFile.getName()));int len = 0 ;byte[] _byte = new byte[1024];while( (len = _in.read(_byte)) > 0 ){zipOut.write(_byte, 0, len);}_in.close();zipOut.closeEntry();}}}/*** @Author AlphaJunS* @Date 11:34 2020/3/8* @Description 解压缩ZIP⽂件,将ZIP⽂件⾥的内容解压到targetDIR⽬录下* @param zipPath 待解压缩的ZIP⽂件名* @param descDir ⽬标⽬录* @return java.util.List<java.io.File>*/public static List<File> unzipFile(String zipPath, String descDir) {return unzipFile(new File(zipPath) , descDir) ;}/*** @Author AlphaJunS* @Date 11:36 2020/3/8* @Description 对.zip⽂件进⾏解压缩* @param zipFile 解压缩⽂件* @param descDir 压缩的⽬标地址,如:D:\\测试或 /mnt/d/测试* @return java.util.List<java.io.File>*/@SuppressWarnings("rawtypes")public static List<File> unzipFile(File zipFile, String descDir) {List<File> _list = new ArrayList<File>() ;try {ZipFile _zipFile = new ZipFile(zipFile , "GBK") ;for( Enumeration entries = _zipFile.getEntries() ; entries.hasMoreElements() ; ){ ZipEntry entry = (ZipEntry)entries.nextElement() ;File _file = new File(descDir + File.separator + entry.getName()) ;if( entry.isDirectory() ){_file.mkdirs() ;}else{File _parent = _file.getParentFile() ;if( !_parent.exists() ){_parent.mkdirs() ;}InputStream _in = _zipFile.getInputStream(entry);OutputStream _out = new FileOutputStream(_file) ;int len = 0 ;byte[] _byte = new byte[1024];while( (len = _in.read(_byte)) > 0){_out.write(_byte, 0, len);}_in.close();_out.flush();_out.close();_list.add(_file) ;}}} catch (IOException e) {}return _list ;}/*** @Author AlphaJunS* @Date 11:36 2020/3/8* @Description 对临时⽣成的⽂件夹和⽂件夹下的⽂件进⾏删除* @param delpath* @return void*/public static void deletefile(String delpath) {try {File file = new File(delpath);if (!file.isDirectory()) {file.delete();} else if (file.isDirectory()) {String[] fileList = file.list();for (int i = 0; i < fileList.length; i++) {File delfile = new File(delpath + File.separator + fileList[i]);if (!delfile.isDirectory()) {delfile.delete();} else if (delfile.isDirectory()) {deletefile(delpath + File.separator + fileList[i]);}}file.delete();}} catch (Exception e) {e.printStackTrace();}}}以上就是⽤Java进⾏zip⽂件压缩与解压缩的详细内容,更多关于java zip⽂件压缩与解压缩的资料请关注其它相关⽂章!。
Java实现对zip和rar文件的解压缩
Java实现对zip和rar⽂件的解压缩通过java实现对zip和rar⽂件的解压缩1package com.svse.test;2import java.io.File;3import java.io.FileOutputStream;4import java.io.IOException;5import java.io.InputStream;6import java.io.OutputStream;7import java.util.Enumeration;8import org.apache.tools.zip.ZipEntry;9import org.apache.tools.zip.ZipFile;10import de.innosystec.unrar.Archive;11import de.innosystec.unrar.rarfile.FileHeader;12/**13* zip和rar解压缩⼯具类14* @author lenovo15*16*/17public class ZipAndRarTools {18/**19 * 解压rar20 * @param sourceRarPath 需要解压的rar⽂件全路径21 * @param destDirPath 需要解压到的⽂件⽬录22 * @throws Exception23*/24public static void unrar(String sourceRarPath, String destDirPath) throws Exception {25 File sourceRar=new File(sourceRarPath);26 File destDir=new File(destDirPath);27 Archive archive = null;28 FileOutputStream fos = null;29 System.out.println("Starting 开始解压...");30 try {31 archive = new Archive(sourceRar);32 FileHeader fh = archive.nextFileHeader();33 int count = 0;34 File destFileName = null;35 while (fh != null) {36 System.out.println((++count) + ") " + fh.getFileNameString());37 String compressFileName = fh.getFileNameString().trim();38 destFileName = new File(destDir.getAbsolutePath() + "/" + compressFileName);39 if (fh.isDirectory()) {40 if (!destFileName.exists()) {41 destFileName.mkdirs();42 }43 fh = archive.nextFileHeader();44 continue;45 }46 if (!destFileName.getParentFile().exists()) {47 destFileName.getParentFile().mkdirs();48 }4950 fos = new FileOutputStream(destFileName);51 archive.extractFile(fh, fos);52 fos.close();53 fos = null;54 fh = archive.nextFileHeader();55 }5657 archive.close();58 archive = null;59 System.out.println("Finished 解压完成!");60 } catch (Exception e) {61throw e;62 } finally {63if (fos != null) {64try {65 fos.close();66 fos = null;67 } catch (Exception e) {68 }69 }70if (archive != null) {71try {72 archive.close();73 archive = null;74 } catch (Exception e) {75 }76 }77 }78 }798081/**82 * 解压Zip⽂件83 * @param zipFileName 需要解压缩的⽂件位置84 * @param descFileName 将⽂件解压到某个路径85 * @throws IOException86*/87public static void unZip(String zipFileName,String descFileName) throws IOException{88 System.out.println("⽂件解压开始...");89 String descFileNames=descFileName;90if(!descFileNames.endsWith(File.separator)){91 descFileNames=descFileNames+File.separator;92 }93try {94 ZipFile zipFile=new ZipFile(zipFileName);95 ZipEntry entry=null;96 String entryName=null;97 String descFileDir=null;98 byte[] buf=new byte[4096];99 int readByte=0;100 @SuppressWarnings("rawtypes")101 Enumeration enums=zipFile.getEntries();102 while(enums.hasMoreElements()){103 entry =(ZipEntry) enums.nextElement();104 entryName=entry.getName();105 descFileDir=descFileNames+entryName;106 if(entry.isDirectory()){107 new File(descFileDir).mkdir();108 continue;109 }else{110 new File(descFileDir).getParentFile().mkdir();111 }112 File file=new File(descFileDir);113 OutputStream os=new FileOutputStream(file);114 InputStream is=zipFile.getInputStream(entry);115while((readByte=is.read(buf))!=-1){116 os.write(buf, 0, readByte);117 }118 os.close();119 is.close();120 }121 zipFile.close();122 System.out.println("⽂件解压成功!");123 } catch (Exception e) {124 System.out.println("⽂件解压失败!");125 e.printStackTrace();126 }127128 }129130public static void main(String[] args) throws Exception {131//ZipAndRarTools.unrar(newFile("D:\\存放资料的压缩包\\员⼯材料.rar"),newFile("D:\\存放资料的⾮压缩包\\")); 132133 ZipAndRarTools.unZip("D:\\rarTest\\jar包和配置⽂件资源.zip", "D:\\rarTest");134 ZipAndRarTools.unrar("D:\\rarTest\\rar压缩包.rar", "D:\\rarTest");135136 }137 }。
Java中zip的压缩和解压缩的实现代码
Java中zip的压缩和解压缩的实现代码在Java中可以使⽤ZipOutputStream和ZipInputStream来实现zip的压缩和解压缩操作,另外使⽤FileSystem也可以⽤来实现zip的解压缩,下⾯将介绍这⼏种⽅式,直接上代码。
zip压缩待压缩⽂件⽬录结构:每个zip⽂件项都要对应⼀个ZipEntry,然后通过ZipOutputStream的putNextEntry⽅法开始写⼊⼀个新的zip⽂件项,将⽂件数据发送到zip输出流中,完成后再调⽤closeEntry⽅法。
@Testpublic void testCompressByZip() {try (//指定压缩完成后zip⽂件的存储路径ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("F:\\myFavorites.zip"))){//待压缩⽂件/⽬录所在的⽬录File fileFolder = new File("F:\\我的收藏");//获取⽬录下的所有⽂件File[] files = fileFolder.listFiles();ZipEntry zipEntry;byte[] byteArray;int len;//遍历⽬录下的所有⽂件/⽬录,并将它们添加到压缩⽂件中for (File file : files) {//⼀个ZipEntry对应压缩⽂件中的⼀项zipEntry = new ZipEntry(file.getName());zipOutputStream.putNextEntry(zipEntry);try (FileInputStream in = new FileInputStream(file)) {byteArray = new byte[1024];while ((len = in.read(byteArray)) != -1) {zipOutputStream.write(byteArray, 0, len);}} catch (IOException ex) {ex.printStackTrace();}zipOutputStream.closeEntry();}} catch (IOException ex) {ex.printStackTrace();}}压缩结果:zip解压缩遍历zip⽂件中的所有项,并获取对应项的输⼊流,然后通过FileOutputStream输出到指定⽬录中。
如何在Java中进行文件的压缩和解压缩
如何在Java中进行文件的压缩和解压缩在Java中进行文件的压缩和解压缩是常见的操作,可以使用Java 标准库提供的功能来实现。
本文将介绍如何使用Java中的ZipOutputStream来进行文件压缩,以及使用ZipInputStream来进行文件解压缩。
一、文件的压缩文件的压缩是将一个或多个文件或文件夹打包成一个压缩文件,压缩文件通常使用.zip格式。
在Java中,可以使用ZipOutputStream 来创建一个新的压缩文件,并将文件添加到压缩文件中。
1.创建压缩文件要使用ZipOutputStream创建一个新的压缩文件,首先需要创建一个FileOutputStream来写入文件的数据。
然后将FileOutputStream 传递给ZipOutputStream的构造函数,以创建一个与特定文件关联的ZipOutputStream。
```javaFileOutputStream fos = newFileOutputStream("compressed.zip");ZipOutputStream zos = new ZipOutputStream(fos);```上述代码中,我们创建了一个名为compressed.zip的压缩文件,并将其关联到一个FileOutputStream中。
接下来,我们将使用ZipOutputStream对象向文件中添加数据。
2.向压缩文件中添加文件要向压缩文件中添加一个文件,可以使用ZipEntry和putNextEntry方法。
ZipEntry表示压缩文件中的一个条目,我们可以通过ZipEntry的构造函数来创建一个新的条目,并使用putNextEntry 方法来指定下一个要添加数据的条目。
```javaFile fileToAdd = new File("fileToAdd.txt");ZipEntry zipEntry = new ZipEntry(fileToAdd.getName());zos.putNextEntry(zipEntry);//将fileToAdd的数据写入到压缩文件中FileInputStream fis = new FileInputStream(fileToAdd);byte[] buffer = new byte[1024];int length;while ((length = fis.read(buffer)) > 0) {zos.write(buffer, 0, length);}//关闭当前条目zos.closeEntry();fis.close();```在上述代码中,我们首先创建一个ZipEntry来表示将要添加的文件,然后使用putNextEntry方法指定下一个要添加数据的条目。
使用Java?API压缩和?解压缩数据
使⽤Java?API压缩和?解压缩数据使⽤Java API压缩和解压缩数据(2007-09-24 09:29:52)转载标签:学习公社分类:⼯作参考⽂档从ZIP⽂件解压并抽取数据java.util.zip包提供了数据压缩和解压缩的类。
解压ZIP⽂件实质是从输⼊流中读出数据。
java.util.zip包提供了读取ZIP⽂件的ZipInputStream类。
可以像任何其他输⼊流那样创建ZipInputStream。
例如,下列代码可⽤于创建输FileInputStream fis = new FileInputStream("figs.zip"); ZipInputStream zin = new ZipInputStream(new BufferedInputStream(fis));⼀旦打开ZIP输⼊流,就可以使⽤getNextEntry⽅法读取zip条⽬,该⽅法返回ZipEntry对象。
如果到达⽂件末尾,getNextEntry就会返回零值:ZipEntry entry; while((entry = zin.getNextEntry()) != null) { // extract data // open output streams }现在创建解压缩输出流,如下:int BUFFER = 2048; FileOutputStream fos = new FileOutputStream(entry.getName()); BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);注意: 在此节代码中,我们⽤BufferedOutputStream代替了ZIPOutputStream。
ZIPOutputStream和GZIPOutputStream使⽤⼤⼩为 512 的内部缓冲。
BufferedOutputStream的使⽤仅在缓冲的⼤⼩远远超过 512 时(本例的设置为在本节代码中,⽂件输出流是使⽤条⽬的名称创建的,该名称可以使⽤entry.getName⽅法进⾏检索。
Java解压和压缩带密码的zip文件过程详解
Java解压和压缩带密码的zip⽂件过程详解前⾔JDK⾃带的ZIP操作接⼝(java.util.zip包,请参看⽂章末尾的博客链接)并不⽀持密码,甚⾄也不⽀持中⽂⽂件名。
为了解决ZIP压缩⽂件的密码问题,在⽹上搜索良久,终于找到了winzipaes开源项⽬。
该项⽬在下托管,仅⽀持AES压缩和解压zip⽂件( This library only supports Win-Zip's 256-Bit AES mode.)。
⽹站上下载的⽂件是源代码,最新版本为winzipaes_src_20120416.zip,本⽰例就是在此基础上编写。
详述项⽬使⽤很简单,利⽤源码⾃⼰导出⼀个jar⽂件,在项⽬中引⽤即可。
这⾥有⼀个需要注意的问题,就是如果给定ZIP⽂件没有密码,那么就不能使⽤该项⽬解压,如果压缩⽂件没有密码却使⽤该项⽬解压在这⾥会报⼀个异常,所以使⽤中需要注意:加密ZIP⽂件可以使⽤它解压,没有加密的就需要采取其它⽅式了。
此⽂就是采⽤修改后的winzipaes编写,并记录详细修改步骤。
⽰例在研究该项⽬时写了⼀个⼯具类,本来准备⽤在项⽬中,最后找到了更好的解决⽅案zip4j来代替,所以最终没有采⽤。
package com.ninemax.demo.zip.decrypt;import java.io.File;import java.io.IOException;import java.util.List;import java.util.zip.DataFormatException;import mons.io.FileUtils;import de.idyl.winzipaes.AesZipFileDecrypter;import de.idyl.winzipaes.AesZipFileEncrypter;import de.idyl.winzipaes.impl.AESDecrypter;import de.idyl.winzipaes.impl.AESDecrypterBC;import de.idyl.winzipaes.impl.AESEncrypter;import de.idyl.winzipaes.impl.AESEncrypterBC;import de.idyl.winzipaes.impl.ExtZipEntry;/*** 压缩指定⽂件或⽬录为ZIP格式压缩⽂件* ⽀持中⽂(修改源码后)* ⽀持密码(仅⽀持256bit的AES加密解密)* 依赖bcprov项⽬(bcprov-jdk16-140.jar)** @author zyh*/public class DecryptionZipUtil {/*** 使⽤指定密码将给定⽂件或⽂件夹压缩成指定的输出ZIP⽂件* @param srcFile 需要压缩的⽂件或⽂件夹* @param destPath 输出路径* @param passwd 压缩⽂件使⽤的密码*/public static void zip(String srcFile,String destPath,String passwd) {AESEncrypter encrypter = new AESEncrypterBC();AesZipFileEncrypter zipFileEncrypter = null;try {zipFileEncrypter = new AesZipFileEncrypter(destPath, encrypter);/*** 此⽅法是修改源码后添加,⽤以⽀持中⽂⽂件名*/zipFileEncrypter.setEncoding("utf8");File sFile = new File(srcFile);/*** AesZipFileEncrypter提供了重载的添加Entry的⽅法,其中:* add(File f, String passwd)* ⽅法是将⽂件直接添加进压缩⽂件** add(File f, String pathForEntry, String passwd)* ⽅法是按指定路径将⽂件添加进压缩⽂件* pathForEntry - to be used for addition of the file (path within zip file)*/doZip(sFile, zipFileEncrypter, "", passwd);} catch (IOException e) {e.printStackTrace();} finally {try {zipFileEncrypter.close();} catch (IOException e) {e.printStackTrace();}}}/*** 具体压缩⽅法,将给定⽂件添加进压缩⽂件中,并处理压缩⽂件中的路径* @param file 给定磁盘⽂件(是⽂件直接添加,是⽬录递归调⽤添加)* @param encrypter AesZipFileEncrypter实例,⽤于输出加密ZIP⽂件* @param pathForEntry ZIP⽂件中的路径* @param passwd 压缩密码* @throws IOException*/private static void doZip(File file, AesZipFileEncrypter encrypter,String pathForEntry, String passwd) throws IOException {if (file.isFile()) {pathForEntry += file.getName();encrypter.add(file, pathForEntry, passwd);return;}pathForEntry += file.getName() + File.separator;for(File subFile : file.listFiles()) {doZip(subFile, encrypter, pathForEntry, passwd);}}/*** 使⽤给定密码解压指定压缩⽂件到指定⽬录* @param inFile 指定Zip⽂件* @param outDir 解压⽬录* @param passwd 解压密码*/public static void unzip(String inFile, String outDir, String passwd) {File outDirectory = new File(outDir);if (!outDirectory.exists()) {outDirectory.mkdir();}AESDecrypter decrypter = new AESDecrypterBC();AesZipFileDecrypter zipDecrypter = null;try {zipDecrypter = new AesZipFileDecrypter(new File(inFile), decrypter);AesZipFileDecrypter.charset = "utf-8";/*** 得到ZIP⽂件中所有Entry,但此处好像与JDK⾥不同,⽬录不视为Entry* 需要创建⽂件夹,entry.isDirectory()⽅法同样不适⽤,不知道是不是⾃⼰使⽤错误 * 处理⽂件夹问题处理可能不太好*/List<ExtZipEntry> entryList = zipDecrypter.getEntryList();for(ExtZipEntry entry : entryList) {String eName = entry.getName();String dir = eName.substring(0, stIndexOf(File.separator) + 1);File extractDir = new File(outDir, dir);if (!extractDir.exists()) {FileUtils.forceMkdir(extractDir);}/*** 抽出⽂件*/File extractFile = new File(outDir + File.separator + eName);zipDecrypter.extractEntry(entry, extractFile, passwd);}} catch (IOException e) {e.printStackTrace();} catch (DataFormatException e) {e.printStackTrace();} finally {try {zipDecrypter.close();} catch (IOException e) {e.printStackTrace();}}}/*** 测试* @param args*/public static void main(String[] args) {/*** 压缩测试* 可以传⽂件或者⽬录*/// zip("M:\\ZIP\\test\\bb\\a\\t.txt", "M:\\ZIP\\test\\temp1.zip", "zyh");// zip("M:\\ZIP\\test\\bb", "M:\\ZIP\\test\\temp2.zip", "zyh");unzip("M:\\ZIP\\test\\temp2.zip", "M:\\ZIP\\test\\temp", "zyh");}}压缩多个⽂件时,有两个⽅法(第⼀种没试):(1)预先把多个⽂件压缩成zip,然后调⽤enc.addAll(inZipFile, password);⽅法将多个zip⽂件加进来。
java算法实现压缩及解压缩
java算法实现压缩及解压缩压缩及解压缩是计算机领域中常见的操作,它们在数据传输和存储中起着重要的作用。
在Java中,可以使用压缩库对数据进行压缩和解压缩。
在本文中,我们将详细介绍Java中的压缩和解压缩算法的实现方法。
压缩算法的实现:Java中有多种用于压缩数据的方法,包括Deflater和GZIPOutputStream。
Deflater是一个通用的压缩算法,而GZIPOutputStream基于Deflater实现了GZIP文件格式的压缩。
下面是一个使用Deflater压缩字符串的示例代码:```javaimport java.util.zip.Deflater;import java.util.Base64;byte[] input = str.getBytes("UTF-8");Deflater deflater = new Deflater(;deflater.setInput(input);deflater.finish(;byte[] output = new byte[100];deflater.end(;}```在上面的代码中,我们首先将字符串转换为字节数组,并创建一个Deflater对象用于压缩数据。
然后,我们将输入数据设置为要压缩的字节数组,调用finish(方法表示输入结束。
接下来,我们创建一个输出字节数组,并使用deflate(方法压缩数据。
最后,我们将压缩后的数据复制到另一个数组中,并使用Base64编码以便于传输和存储。
解压缩算法的实现:解压缩算法与压缩算法相对应。
Java提供了多种解压缩数据的方法,包括Inflater和GZIPInputStream。
Inflater是一个通用的解压缩算法,而GZIPInputStream基于Inflater实现了GZIP文件格式的解压缩。
下面是一个使用Inflater解压缩字符串的示例代码:```javaimport java.util.zip.Inflater;import java.util.Base64;Inflater inflater = new Inflater(;byte[] output = new byte[100];inflater.end(;}```在上面的代码中,我们首先将压缩后的字符串解码为字节数组。
java解压代码
java解压代码Java中的文件压缩和解压缩是非常常见的操作,它对于压缩和解压缩文件的大小和传输速度起着很大的作用。
Java中提供了一些类用于文件压缩和解压缩,例如ZipInputStream、ZipOutputStream和GZIPInputStream、GZIPOutputStream等等。
这些类使用起来非常简单,只需要了解其基本用法就可以轻松实现文件的压缩和解压缩,下面就来详细了解一下Java解压代码的实现方法。
1. ZipInputStream和ZipOutputStreamZipInputStream和ZipOutputStream可以用来压缩和解压缩Zip格式的文件,Zip格式是一种非常常见的文件格式,它可以用来打包多个文件,节省空间并且便于传输。
下面是一个简单的例子,演示如何使用ZipInputStream和ZipOutputStream来解压和压缩Zip格式的文件://解压缩文件public static void unzip(String zipFilePath, String destDirectory) throws IOException {File destDir = new File(destDirectory);if (!destDir.exists()) {destDir.mkdir();}ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));ZipEntry entry = zipIn.getNextEntry();while (entry != null) {String filePath = destDirectory + File.separator + entry.getName();if (!entry.isDirectory()) {//如果是文件则直接写入文件BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));byte[] bytesIn = new byte[4096];int read = 0;while ((read = zipIn.read(bytesIn)) != -1) { bos.write(bytesIn, 0, read);}bos.close();} else {//如果是文件夹则创建文件夹File dir = new File(filePath);dir.mkdir();}zipIn.closeEntry();entry = zipIn.getNextEntry();}zipIn.close();}//压缩文件public static void zip(String sourceDirectory, String zipFilePath) throws IOException {ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath));File fileToZip = new File(sourceDirectory);zipFile(fileToZip, fileToZip.getName(), zipOut);zipOut.close();}private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException { if (fileToZip.isHidden()) {return;}if (fileToZip.isDirectory()) {if (fileName.endsWith("/")) {zipOut.putNextEntry(new ZipEntry(fileName));zipOut.closeEntry();} else {zipOut.putNextEntry(new ZipEntry(fileName + "/"));zipOut.closeEntry();}File[] children = fileToZip.listFiles();for (File childFile : children) {zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);}return;}FileInputStream fis = new FileInputStream(fileToZip);ZipEntry zipEntry = new ZipEntry(fileName);zipOut.putNextEntry(zipEntry);byte[] bytes = new byte[1024];int length;while ((length = fis.read(bytes)) >= 0) {zipOut.write(bytes, 0, length);}fis.close();}使用ZipInputStream和ZipOutputStream时需要注意以下事项:-每个ZipEntry代表一个文件或者文件夹,ZipInputStream先返回文件夹的信息,再返回文件的信息。
java压缩数据方法
java压缩数据方法Java是一种强大的编程语言,为了更好地节省空间和方便文件传输,Java提供了一些压缩数据的方法。
一、Zip压缩Zip压缩是Java中最常用的压缩方法,它主要使用java.util.zip包下的ZipOutputStream和ZipEntry类。
ZipOutputStream可以将文件压缩成Zip文件,而ZipEntry则代表ZipFile中的每一个文件。
Zip压缩的步骤如下:1. 创建ZipOutputStream对象,并指定输出的Zip文件名。
2. 遍历需要压缩的文件路径,使用FileInputStream的方式读取文件。
3. 创建ZipEntry对象并设置Entry名称。
4. 将ZipEntry对象写入ZipOutputStream中。
5. 将需要压缩的文件写入到ZipOutputStream中。
6. 关闭ZipOutputStream和FileInputStream对象。
二、Gzip压缩除了Zip压缩,Java还提供了Gzip压缩方法,它可以让数据更好地适配网络传输。
Gzip压缩主要使用java.util.zip包下的GZIPOutputStream和GZIPInputStream类。
Gzip压缩的步骤如下:1. 创建GZIPOutputStream对象,该对象用于压缩数据。
2. 写入需要压缩的数据。
3. 结束压缩并关闭流。
4. 创建GZIPInputStream对象,该对象用于解压缩数据。
5. 将需要解压缩的数据传入GZIPInputStream对象。
6. 读取解压缩后的数据。
7. 关闭GZIPInputStream对象。
三、Deflate压缩类似于Gzip压缩,Java还提供了Deflate压缩方法。
Deflate压缩主要使用java.util.zip包下的Deflater和Inflater类。
Deflate压缩的步骤如下:1. 创建Deflater对象,该对象用于压缩数据。
java对zip压缩文件解压缩
本文由我司收集整编,推荐下载,如有疑问,请与我司联系java 对zip 压缩文件解压缩2010/11/03 3065 偶尔一次,遇到这样一个问题,要求对zip 文件进行解压缩,并读取压缩包中.txt 和.inf 文件的数据,经过jdk Helper 和Google 才将问题得以解决。
这里只写了解压过程,在main 方法中压缩包存放路径和解压到目标的文件已经硬编码进去了。
程序整体结构不是很令人满意,仍然需要重构.......package com.da.unzip;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.Reader;import java.nio.ByteBuffer;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;public class Unzip {public static void main(String[] args) throws Exception {Unzip unzip = new Unzip();String zippath = “C:\\unzip\\”;// /解压到的目标文件路径String zipDir = “C:\\data\\”;//要解压的压缩文件的存放路径File file = newFile(zipDir); List list = unzip.getSubFiles(file); for (Object obj : list) { String realname = ((File)obj).getName(); System.out.println(realname); int end = stIndexOf(“.”); System.out.println(“要解压缩的文件名..........”+zipDir+realname);System.out.println(“解压到的目录”+zippath+realname.substring(0, end)); unzip.testReadZip(zippath,zipDir+realname); }}/* * 解压缩功能. 将zippath 目录文件解压到unzipPath 目录下. @throws Exception */public void ReadZip(String zippath, String unzipPath) throws Exception {。
Java实现解压缩ZIP
Java实现解压缩ZIP Java实现解压缩ZIP1、MultipartFile 转为File⼯具类@Componentpublic class MultipartFileToFile {public File ultipartFileToFile(MultipartFile file) throws Exception {File toFile = null;if (file.equals("") || file.getSize() <= 0) {file = null;} else {InputStream ins = null;ins = file.getInputStream();toFile = new File(file.getOriginalFilename());inputStreamToFile(ins, toFile);ins.close();}return toFile;}//获取流⽂件private static void inputStreamToFile(InputStream ins, File file) {try {OutputStream os = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.close();ins.close();} catch (Exception e) {e.printStackTrace();}}2、获取压缩⽂件中的全部⽂件名称@Resourceprivate MultipartFileToFile multipartFileToFile;/*** 获取压缩⽂件中的全部⽂件名称* @param multipartFile* @return List*/@PostMapping("getFileName")public R getFileName(MultipartFile multipartFile){//创建List,存放获取的⽂件名称List<String> list = new ArrayList<>();File file=null;try {//将MultipartFile转化为Filefile = multipartFileToFile.ultipartFileToFile(multipartFile);//创建ZipFile对象,解析file⽂件ZipFile zipFile = new ZipFile(file);//获取压缩⽂件中的⽂件个数int size = zipFile.size();Enumeration<? extends ZipEntry> entries = zipFile.entries();while (entries.hasMoreElements()) {list.add(entries.nextElement().getName());}} catch (Exception e) {e.printStackTrace();}System.out.println(list);return R.ok().data("list",list);}3、解压⽂件到指定⽬录/*** 解压⽂件到指定⽬录* @param multipartFile* @return success/error*/@PostMapping("decmpressionFile")public R decmpression(MultipartFile multipartFile){//指定压缩⽂件存放路径(最后⼀个/不能少)String descDir="F://online-education/";File Zipfile=null;try {//将MultipartFile转化为FileZipfile = multipartFileToFile.ultipartFileToFile(multipartFile);File pathFile = new File(descDir);if(!pathFile.exists()){pathFile.mkdirs();}//解决zip⽂件中有中⽂⽬录或者中⽂⽂件ZipFile zip = new ZipFile(Zipfile, Charset.forName("GBK"));for(Enumeration entries = zip.entries(); entries.hasMoreElements();){ZipEntry entry = (ZipEntry)entries.nextElement();String zipEntryName = entry.getName();InputStream in = zip.getInputStream(entry);String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;//判断路径是否存在,不存在则创建⽂件路径File file = new File(outPath.substring(0, stIndexOf('/')));if(!file.exists()){file.mkdirs();}//判断⽂件全路径是否为⽂件夹,如果是上⾯已经上传,不需要解压if(new File(outPath).isDirectory()){continue;}//输出⽂件路径信息System.out.println(outPath);OutputStream out = new FileOutputStream(outPath);byte[] buf1 = new byte[1024];int len;while((len=in.read(buf1))>0){out.write(buf1,0,len);}in.close();out.close();}} catch (Exception e) {e.printStackTrace();}return R.ok();}*问题:将MultipartFile转化为File后,放到ZipFile中,使⽤zipFile.size⽅法获取数量及压缩⽂件中的⽂件名称,会出现⼀个名为压缩包⽂件名称的⽂件,数量同样多⼀个。
Java解压zip文件完整代码分享
Java解压zip⽂件完整代码分享关于Java解压zip⽂件,我觉得也没啥好多说的,就是⼲呗。
代码如下:package nyuan.assembly.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Enumeration;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;/*** 解压Zip⽂件⼯具类* @author zhangyongbo**/public class ZipUtil{private static final int buffer = 2048;/*** 解压Zip⽂件* @param path ⽂件⽬录*/public static void unZip(String path){int count = -1;String savepath = "";File file = null;InputStream is = null;FileOutputStream fos = null;BufferedOutputStream bos = null;savepath = path.substring(0, stIndexOf(".")) + File.separator; //保存解压⽂件⽬录new File(savepath).mkdir(); //创建保存⽬录ZipFile zipFile = null;try{zipFile = new ZipFile(path,"gbk"); //解决中⽂乱码问题Enumeration<?> entries = zipFile.getEntries();while(entries.hasMoreElements()){byte buf[] = new byte[buffer];ZipEntry entry = (ZipEntry)entries.nextElement();String filename = entry.getName();boolean ismkdir = false;if(stIndexOf("/") != -1){ //检查此⽂件是否带有⽂件夹ismkdir = true;}filename = savepath + filename;if(entry.isDirectory()){ //如果是⽂件夹先创建file = new File(filename);file.mkdirs();continue;}file = new File(filename);if(!file.exists()){ //如果是⽬录先创建if(ismkdir){new File(filename.substring(0, stIndexOf("/"))).mkdirs(); //⽬录先创建}}file.createNewFile(); //创建⽂件is = zipFile.getInputStream(entry);fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos, buffer);while((count = is.read(buf)) > -1){bos.write(buf, 0, count);}bos.flush();bos.close();fos.close();is.close();}zipFile.close();}catch(IOException ioe){ioe.printStackTrace();}finally{try{if(bos != null){bos.close();}if(fos != null) {fos.close();}if(is != null){is.close();}if(zipFile != null){zipFile.close();}}catch(Exception e) {e.printStackTrace();}}}/*public static void main(String[] args){unZip("F:\\110000002.zip");String f = "F:\\110000002";File file = new File(f);String[] test=file.list();for(int i=0;i<test.length;i++){System.out.println(test[i]);}System.out.println("------------------");String fileName = "";File[] tempList = file.listFiles();for (int i = 0; i < tempList.length; i++) {if (tempList[i].isFile()) {System.out.println("⽂件:"+tempList[i]);fileName = tempList[i].getName();System.out.println("⽂件名:"+fileName);}if (tempList[i].isDirectory()) {System.out.println("⽂件夹:"+tempList[i]);}}} */}上⾯是第⼀种的代码⽰例,接着是另外⼀种,代码如下:import java.io.*;import java.nio.charset.Charset;import java.util.Enumeration;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;/*** Created by wzj on 2016/9/9.*/public class UZipFile{/*** 解压到指定⽬录*/public static void unZipFiles(String zipPath,String descDir)throws IOException {unZipFiles(new File(zipPath), descDir);}/*** 解压⽂件到指定⽬录*/@SuppressWarnings("rawtypes")public static void unZipFiles(File zipFile,String descDir)throws IOException{File pathFile = new File(descDir);if(!pathFile.exists()){pathFile.mkdirs();}//解决zip⽂件中有中⽂⽬录或者中⽂⽂件ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));for(Enumeration entries = zip.entries(); entries.hasMoreElements();){ZipEntry entry = (ZipEntry)entries.nextElement();String zipEntryName = entry.getName();InputStream in = zip.getInputStream(entry);String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;//判断路径是否存在,不存在则创建⽂件路径File file = new File(outPath.substring(0, stIndexOf('/')));if(!file.exists()){file.mkdirs();}//判断⽂件全路径是否为⽂件夹,如果是上⾯已经上传,不需要解压if(new File(outPath).isDirectory()){continue;}//输出⽂件路径信息System.out.println(outPath);OutputStream out = new FileOutputStream(outPath);byte[] buf1 = new byte[1024];int len;while((len=in.read(buf1))>0){out.write(buf1,0,len);}in.close();out.close();}System.out.println("******************解压完毕********************");}public static void main(String[] args) throws IOException {/*** 解压⽂件*/File zipFile = new File("d:/资料.zip");String path = "d:/zipfile/";unZipFiles(zipFile, path);}}测试结果d:/zipfile/资料/三⼤框架所有题.htmd:/zipfile/资料/三⼤框架所有题_files/bootstrap.cssd:/zipfile/资料/三⼤框架所有题_files/bootstrap.jsd:/zipfile/资料/三⼤框架所有题_files/css_global.cssd:/zipfile/资料/三⼤框架所有题_files/jquery.jsd:/zipfile/资料/三⼤框架所有题_files/logo.pngd:/zipfile/资料/三⼤框架所有题_files/scripts(1).phpd:/zipfile/资料/三⼤框架所有题_files/scripts(2).phpd:/zipfile/资料/三⼤框架所有题_files/scripts.jsd:/zipfile/资料/三⼤框架所有题_files/scripts.phpd:/zipfile/资料/三⼤框架所有题_files/transparent.gifd:/zipfile/资料/回顾.txtd:/zipfile/资料/源码/day29_00_struts2Interceptor/.classpathd:/zipfile/资料/源码/day29_00_struts2Interceptor/.mymetadatad:/zipfile/资料/源码/day29_00_struts2Interceptor/.projectd:/zipfile/资料/源码/day29_00_struts2Interceptor/.settings/.jsdtscoped:/zipfile/资料/源码/day29_00_struts2Interceptor/.settings/com.genuitec.eclipse.j2eedt.core.prefsd:/zipfile/资料/源码/day29_00_struts2Interceptor/.settings/org.eclipse.jdt.core.prefsd:/zipfile/资料/源码/day29_00_struts2Interceptor/.settings/ponentd:/zipfile/资料/源码/day29_00_struts2Interceptor/.settings/mon.project.facet.core.xmld:/zipfile/资料/源码/day29_00_struts2Interceptor/.settings/org.eclipse.wst.jsdt.ui.superType.containerd:/zipfile/资料/源码/day29_00_struts2Interceptor/.settings/d:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/1.jspd:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/META-INF/MANIFEST.MFd:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/classes/com/itheima/action/Demo1Action.classd:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/classes/com/itheima/action/UserAction.classd:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/classes/com/itheima/interceptors/Demo1Interceptor.class d:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/classes/com/itheima/interceptors/LoginCheckInterceptor.class d:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/classes/struts.xmld:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/asm-3.3.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/asm-commons-3.3.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/asm-tree-3.3.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/commons-fileupload-1.3.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/commons-io-2.0.1.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/commons-lang3-3.1.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/commons-logging-1.1.3.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/freemarker-2.3.19.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/javassist-3.11.0.GA.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/log4j-1.2.17.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/ognl-3.0.6.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/struts2-core-2.3.15.3.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/lib/xwork-core-2.3.15.3.jard:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/WEB-INF/web.xmld:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/index.jspd:/zipfile/资料/源码/day29_00_struts2Interceptor/WebRoot/login.jspd:/zipfile/资料/源码/day29_00_struts2Interceptor/src/com/itheima/action/Demo1Action.javad:/zipfile/资料/源码/day29_00_struts2Interceptor/src/com/itheima/action/UserAction.javad:/zipfile/资料/源码/day29_00_struts2Interceptor/src/com/itheima/interceptors/Demo1Interceptor.javad:/zipfile/资料/源码/day29_00_struts2Interceptor/src/com/itheima/interceptors/LoginCheckInterceptor.javad:/zipfile/资料/源码/day29_00_struts2Interceptor/src/struts.xmld:/zipfile/资料/源码/day29_01_struts2Upload/.classpathd:/zipfile/资料/源码/day29_01_struts2Upload/.mymetadatad:/zipfile/资料/源码/day29_01_struts2Upload/.projectd:/zipfile/资料/源码/day29_01_struts2Upload/.settings/.jsdtscoped:/zipfile/资料/源码/day29_01_struts2Upload/.settings/com.genuitec.eclipse.j2eedt.core.prefsd:/zipfile/资料/源码/day29_01_struts2Upload/.settings/org.eclipse.jdt.core.prefsd:/zipfile/资料/源码/day29_01_struts2Upload/.settings/ponentd:/zipfile/资料/源码/day29_01_struts2Upload/.settings/mon.project.facet.core.xmld:/zipfile/资料/源码/day29_01_struts2Upload/.settings/org.eclipse.wst.jsdt.ui.superType.containerd:/zipfile/资料/源码/day29_01_struts2Upload/.settings/d:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/1.jspd:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/2.jspd:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/META-INF/MANIFEST.MFd:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/classes/com/itheima/action/DownloadAction.classd:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/classes/com/itheima/action/Upload1Action.classd:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/classes/com/itheima/action/Upload1Action_zh_CN.properties d:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/classes/com/itheima/action/Upload2Action.classd:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/classes/struts.xmld:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/classes/美⼥.jpgd:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/asm-3.3.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/asm-commons-3.3.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/asm-tree-3.3.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/commons-fileupload-1.3.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/commons-io-2.0.1.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/commons-lang3-3.1.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/commons-logging-1.1.3.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/freemarker-2.3.19.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/javassist-3.11.0.GA.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/log4j-1.2.17.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/ognl-3.0.6.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/struts2-core-2.3.15.3.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/lib/xwork-core-2.3.15.3.jard:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/WEB-INF/web.xmld:/zipfile/资料/源码/day29_01_struts2Upload/WebRoot/success.jspd:/zipfile/资料/源码/day29_01_struts2Upload/src/com/itheima/action/DownloadAction.javad:/zipfile/资料/源码/day29_01_struts2Upload/src/com/itheima/action/Upload1Action.javad:/zipfile/资料/源码/day29_01_struts2Upload/src/com/itheima/action/Upload1Action_zh_CN.propertiesd:/zipfile/资料/源码/day29_01_struts2Upload/src/com/itheima/action/Upload2Action.javad:/zipfile/资料/源码/day29_01_struts2Upload/src/struts.xmld:/zipfile/资料/源码/day29_01_struts2Upload/src/美⼥.jpgd:/zipfile/资料/源码/day29_02_struts2ognl/.classpathd:/zipfile/资料/源码/day29_02_struts2ognl/.mymetadatad:/zipfile/资料/源码/day29_02_struts2ognl/.projectd:/zipfile/资料/源码/day29_02_struts2ognl/.settings/.jsdtscoped:/zipfile/资料/源码/day29_02_struts2ognl/.settings/com.genuitec.eclipse.j2eedt.core.prefsd:/zipfile/资料/源码/day29_02_struts2ognl/.settings/org.eclipse.jdt.core.prefsd:/zipfile/资料/源码/day29_02_struts2ognl/.settings/ponentd:/zipfile/资料/源码/day29_02_struts2ognl/.settings/mon.project.facet.core.xmld:/zipfile/资料/源码/day29_02_struts2ognl/.settings/org.eclipse.wst.jsdt.ui.superType.containerd:/zipfile/资料/源码/day29_02_struts2ognl/.settings/d:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/1.jspd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/2.jspd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/3.jspd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/4.jspd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/5.jspd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/6.jspd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/7.jspd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/META-INF/MANIFEST.MFd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/classes/com/itheima/action/Demo1Action.classd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/classes/com/itheima/action/Demo2Action.classd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/classes/com/itheima/action/Demo3Action.classd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/classes/com/itheima/domain/User.classd:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/classes/struts.xmld:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/asm-3.3.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/asm-commons-3.3.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/asm-tree-3.3.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/commons-fileupload-1.3.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/commons-io-2.0.1.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/commons-lang3-3.1.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/commons-logging-1.1.3.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/freemarker-2.3.19.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/javassist-3.11.0.GA.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/log4j-1.2.17.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/ognl-3.0.6.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/struts2-core-2.3.15.3.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/lib/xwork-core-2.3.15.3.jard:/zipfile/资料/源码/day29_02_struts2ognl/WebRoot/WEB-INF/web.xmld:/zipfile/资料/源码/day29_02_struts2ognl/src/com/itheima/action/Demo1Action.javad:/zipfile/资料/源码/day29_02_struts2ognl/src/com/itheima/action/Demo2Action.javad:/zipfile/资料/源码/day29_02_struts2ognl/src/com/itheima/action/Demo3Action.javad:/zipfile/资料/源码/day29_02_struts2ognl/src/com/itheima/domain/User.javad:/zipfile/资料/源码/day29_02_struts2ognl/src/struts.xmld:/zipfile/资料/课堂笔记.doc******************解压完毕********************总结以上就是Java解压zip⽂件完整代码分享的全部内容,希望对⼤家有所帮助。
Java实现的zip压缩及解压缩工具类示例
Java实现的zip压缩及解压缩⼯具类⽰例本⽂实例讲述了Java实现的zip压缩及解压缩⼯具类。
分享给⼤家供⼤家参考,具体如下:import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Enumeration;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;public class ZipUtil {private static final int BUFFEREDSIZE = 1024;/*** 压缩⽂件** @param zipFileName* 保存的压缩包⽂件路径* @param filePath* 需要压缩的⽂件夹或者⽂件路径* @param isDelete* 是否删除源⽂件* @throws Exception*/public void zip(String zipFileName, String filePath, boolean isDelete) throws Exception {zip(zipFileName, new File(filePath), isDelete);}/*** 压缩⽂件** @param zipFileName* 保存的压缩包⽂件路径* @param inputFile* 需要压缩的⽂件夹或者⽂件* @param isDelete* 是否删除源⽂件* @throws Exception*/public void zip(String zipFileName, File inputFile, boolean isDelete) throws Exception {ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));if (!inputFile.exists()) {throw new FileNotFoundException("在指定路径未找到需要压缩的⽂件!");}zip(out, inputFile, "", isDelete);out.close();}/*** 递归压缩⽅法** @param out* 压缩包输出流* @param f* 需要压缩的⽂件* @param base* 压缩的路径* @param isDelete* 是否删除源⽂件* @throws Exception*/private void zip(ZipOutputStream out, File inputFile, String base, boolean isDelete) throws Exception {if (inputFile.isDirectory()) { // 如果是⽬录File[] inputFiles = inputFile.listFiles();out.putNextEntry(new ZipEntry(base + "/"));base = base.length() == 0 ? "" : base + "/";for (int i = 0; i < inputFiles.length; i++) {zip(out, inputFiles[i], base + inputFiles[i].getName(), isDelete);}} else { // 如果是⽂件if (base.length() > 0) {out.putNextEntry(new ZipEntry(base));} else {out.putNextEntry(new ZipEntry(inputFile.getName()));}FileInputStream in = new FileInputStream(inputFile);try {int len;byte[] buff = new byte[BUFFEREDSIZE];while ((len = in.read(buff)) != -1) {out.write(buff, 0, len);}} catch (IOException e) {throw e;} finally {in.close();}}if (isDelete) {inputFile.delete();}}/*** 解压缩** @param zipFilePath* 压缩包路径* @param fileSavePath* 解压路径* @param isDelete* 是否删除源⽂件* @throws Exception*/public void unZip(String zipFilePath, String fileSavePath, boolean isDelete) throws Exception { try {(new File(fileSavePath)).mkdirs();File f = new File(zipFilePath);if ((!f.exists()) && (f.length() <= 0)) {throw new Exception("要解压的⽂件不存在!");}ZipFile zipFile = new ZipFile(f);String strPath, gbkPath, strtemp;File tempFile = new File(fileSavePath);// 从当前⽬录开始strPath = tempFile.getAbsolutePath();// 输出的绝对位置Enumeration<ZipEntry> e = zipFile.getEntries();while (e.hasMoreElements()) {org.apache.tools.zip.ZipEntry zipEnt = e.nextElement();gbkPath = zipEnt.getName();if (zipEnt.isDirectory()) {strtemp = strPath + File.separator + gbkPath;File dir = new File(strtemp);dir.mkdirs();continue;} else {// 读写⽂件InputStream is = zipFile.getInputStream(zipEnt);BufferedInputStream bis = new BufferedInputStream(is);gbkPath = zipEnt.getName();strtemp = strPath + File.separator + gbkPath;// 建⽬录String strsubdir = gbkPath;for (int i = 0; i < strsubdir.length(); i++) {if (strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {String temp = strPath + File.separator + strsubdir.substring(0, i);File subdir = new File(temp);if (!subdir.exists())subdir.mkdir();}}FileOutputStream fos = new FileOutputStream(strtemp);BufferedOutputStream bos = new BufferedOutputStream(fos);int len;byte[] buff = new byte[BUFFEREDSIZE];while ((len = bis.read(buff)) != -1) {bos.write(buff, 0, len);}bos.close();fos.close();}}} catch (Exception e) {e.printStackTrace();throw e;}if (isDelete) {new File(zipFilePath).delete();}}// public static void main(String[] args) {// ZipUtil cpr = new ZipUtil();// try {// cpr.zip("C:/Users/Lenovo User/Desktop/test中⽂.zip", "C:/Users/Lenovo User/Desktop/新建⽂件夹", false);// cpr.unZip("C:/Users/Lenovo User/Desktop/test中⽂.zip", "C:/Users/Lenovo User/Desktop/新建⽂件夹2", false); // } catch (Exception e) {// e.printStackTrace();// }//// }}更多关于java算法相关内容感兴趣的读者可查看本站专题:《》、《》、《》和《》希望本⽂所述对⼤家java程序设计有所帮助。
如何在Java中进行文件压缩和解压缩操作
如何在Java中进行文件压缩和解压缩操作文件压缩和解压缩是程序开发中常见的操作,通过压缩可以减小文件的大小,节省存储空间,并且可以快速传输文件。
Java中提供了多种压缩和解压缩文件的方式,如ZipOutputStream和ZipInputStream等类。
本文将详细介绍在Java中进行文件压缩和解压缩的操作步骤和示例代码。
一、文件压缩文件压缩是将一个或多个文件打包成一个压缩文件,常见的压缩文件格式包括zip、tar、gz等。
在Java中,通常使用ZipOutputStream类实现文件压缩操作。
ZipOutputStream类是用于写入ZIP文件的输出流。
1.创建ZipOutputStream对象首先需要创建一个ZipOutputStream对象,用于写入ZIP文件。
可以通过FileOutputStream将ZipOutputStream链接到一个文件,然后就可以向文件中写入压缩数据。
```javaFileOutputStream fos = newFileOutputStream("compressed.zip");ZipOutputStream zos = new ZipOutputStream(fos);```2.添加文件到压缩文件接下来需要将要压缩的文件添加到ZipOutputStream中。
可以通过ZipEntry对象表示压缩文件中的每个文件或目录,并使用putNextEntry方法将文件添加到压缩文件中。
```javaFile file1 = new File("file1.txt");ZipEntry entry1 = new ZipEntry(file1.getName());zos.putNextEntry(entry1);FileInputStream fis1 = new FileInputStream(file1);byte[] buffer = new byte[1024];int length;while ((length = fis1.read(buffer)) > 0) {zos.write(buffer, 0, length);}zos.closeEntry();fis1.close();```3.完成压缩完成文件的添加后,需要关闭ZipOutputStream,以确保压缩文件保存到磁盘。
使用java基础类实现zip压缩和zip解压工具类分享概要
使用java基础类实现zip压缩和zip解压工具类分享使用java基础类写的一个简单的zip压缩解压工具类,实现了指定目录压缩到和该目录同名的zip文件和将zip文件解压到指定的目录的功能使用java基础类写的一个简单的zip压缩解压工具类复制代码代码如下:package .helper;import java.io.*;import java.util.logging.Logger;import java.util.zip.*;public class ZipUtil {private final static Logger logger = Logger.getLogger(ZipUtil.class.getName());private static final int BUFFER = 1024*10;/*** 将指定目录压缩到和该目录同名的zip文件,自定义压缩路径* @param sourceFilePath 目标文件路径* @param zipFilePath 指定zip文件路径* @return*/public static boolean zip(String sourceFilePath,String zipFilePath){boolean result=false;File source=new File(sourceFilePath);if(!source.exists()){(sourceFilePath+" doesn't exist.");return result;}if(!source.isDirectory()){(sourceFilePath+" is not a directory.");return result;}File zipFile=new File(zipFilePath+"/"+source.getName()+".zip"); if(zipFile.exists()){(zipFile.getName()+" is already exist.");return result;}else{if(!zipFile.getParentFile().exists()){if(!zipFile.getParentFile().mkdirs()){("cann't create file "+zipFile.getName());return result;}}}("creating zip file...");FileOutputStream dest=null;ZipOutputStream out =null;try {dest = new FileOutputStream(zipFile);CheckedOutputStream checksum = new CheckedOutputStream(dest, new Adler32()); out=new ZipOutputStream(new BufferedOutputStream(checksum));out.setMethod(ZipOutputStream.DEFLATED);compress(source,out,source.getName());result=true;} catch (FileNotFoundException e) {e.printStackTrace();}finally {if (out != null) {try {out.closeEntry();} catch (IOException e) {e.printStackTrace();}try {out.close();} catch (IOException e) {e.printStackTrace();}}}if(result){("done.");}else{("fail.");}return result;}private static void compress(File file,ZipOutputStream out,String mainFileName) { if(file.isFile()){FileInputStream fi= null;BufferedInputStream origin=null;try {fi = new FileInputStream(file);origin=new BufferedInputStream(fi, BUFFER);int index=file.getAbsolutePath().indexOf(mainFileName);String entryName=file.getAbsolutePath().substring(index);System.out.println(entryName);ZipEntry entry = new ZipEntry(entryName);out.putNextEntry(entry);byte[] data = new byte[BUFFER];int count;while((count = origin.read(data, 0, BUFFER)) != -1) {out.write(data, 0, count);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (origin != null) {try {origin.close();} catch (IOException e) {e.printStackTrace();}}}}else if (file.isDirectory()){File[] fs=file.listFiles();if(fs!=null&&fs.length>0){for(File f:fs){compress(f,out,mainFileName);}}}}/*** 将zip文件解压到指定的目录,该zip文件必须是使用该类的zip方法压缩的文件* @param zipFile* @param destPath* @return*/public static boolean unzip(File zipFile,String destPath){boolean result=false;if(!zipFile.exists()){(zipFile.getName()+" doesn't exist.");return result;}File target=new File(destPath);if(!target.exists()){if(!target.mkdirs()){("cann't create file "+target.getName());return result;}}String mainFileName=zipFile.getName().replace(".zip","");File targetFile=new File(destPath+"/"+mainFileName);if(targetFile.exists()){(targetFile.getName()+" already exist.");return result;}ZipInputStream zis =null;("start unzip file ...");try {FileInputStream fis= new FileInputStream(zipFile);CheckedInputStream checksum = new CheckedInputStream(fis, new Adler32()); zis = new ZipInputStream(new BufferedInputStream(checksum));ZipEntry entry;while((entry = zis.getNextEntry()) != null) {int count;byte data[] = new byte[BUFFER];String entryName=entry.getName();int index=entryName.indexOf(mainFileName);String newEntryName=destPath+"/"+entryName.substring(index); System.out.println(newEntryName);File temp=new File(newEntryName).getParentFile();if(!temp.exists()){if(!temp.mkdirs()){throw new RuntimeException("create file "+temp.getName() +" fail"); }}FileOutputStream fos = new FileOutputStream(newEntryName); BufferedOutputStream dest = new BufferedOutputStream(fos,BUFFER); while ((count = zis.read(data, 0, BUFFER)) != -1) {dest.write(data, 0, count);}dest.flush();dest.close();}result=true;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (zis != null) {try {zis.close();} catch (IOException e) {e.printStackTrace();}}}if(result){("done.");}else{("fail.");}return result;}public static void main(String[] args) throws IOException { //ZipUtil.zip("D:/apache-tomcat-7.0.30", "d:/temp");File zipFile=new File("D:/temp/apache-tomcat-7.0.30.zip"); ZipUtil.unzip(zipFile,"d:/temp") ;}}另一个压缩解压示例,二个工具大家参考使用吧复制代码代码如下:package np;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipException;import java.util.zip.ZipFile;import java.util.zip.ZipInputStream;/*** 解压ZIP压缩文件到指定的目录*/public final class ZipToFile {/*** 缓存区大小默认20480*/private final static int FILE_BUFFER_SIZE = 20480; private ZipToFile() {}/*** 将指定目录的ZIP压缩文件解压到指定的目录* @param zipFilePath ZIP压缩文件的路径* @param zipFileName ZIP压缩文件名字* @param targetFileDir ZIP压缩文件要解压到的目录* @return flag 布尔返回值*/public static boolean unzip(String zipFilePath, String zipFileName, String targetFileDi r){boolean flag = false;//1.判断压缩文件是否存在,以及里面的内容是否为空File file = null; //压缩文件(带路径)ZipFile zipFile = null;file = new File(zipFilePath + "/" + zipFileName);System.out.println(">>>>>>解压文件【" + zipFilePath + "/" + zipFileName + "】到【" + ta rgetFileDir + "】目录下<<<<<<");if(false == file.exists()) {System.out.println(">>>>>>压缩文件【" + zipFilePath + "/" + zipFileName + "】不存在<<<< <<");return false;} else if(0 == file.length()) {System.out.println(">>>>>>压缩文件【" + zipFilePath + "/" + zipFileName + "】大小为0不需要解压<<<<<<");return false;} else {//2.开始解压ZIP压缩文件的处理byte[] buf = new byte[FILE_BUFFER_SIZE];int readSize = -1;ZipInputStream zis = null;FileOutputStream fos = null;try {// 检查是否是zip文件zipFile = new ZipFile(file);zipFile.close();// 判断目标目录是否存在,不存在则创建File newdir = new File(targetFileDir);if (false == newdir.exists()) {newdir.mkdirs();newdir = null;}zis = new ZipInputStream(new FileInputStream(file));ZipEntry zipEntry = zis.getNextEntry();// 开始对压缩包内文件进行处理while (null != zipEntry) {String zipEntryName = zipEntry.getName().replace('\\', '/'); //判断zipEntry是否为目录,如果是,则创建if(zipEntry.isDirectory()) {int indexNumber = stIndexOf('/');File entryDirs = new File(targetFileDir + "/" + zipEntryName.substring(0, indexNumber)); entryDirs.mkdirs();entryDirs = null;} else {try {fos = new FileOutputStream(targetFileDir + "/" + zipEntryName);while ((readSize = zis.read(buf, 0, FILE_BUFFER_SIZE)) != -1) {fos.write(buf, 0, readSize);}} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getCause());} finally {try {if (null != fos) {fos.close();}} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e.getCause());}}}zipEntry = zis.getNextEntry();}flag = true;} catch (ZipException e) {e.printStackTrace();throw new RuntimeException(e.getCause()); } catch (IOException e) {e.printStackTrace();throw new RuntimeException(e.getCause()); } finally {try {if (null != zis) {zis.close();}if (null != fos) {fos.close();}} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e.getCause()); }}}return flag;}/*** 测试用的Main方法*/public static void main(String[] args) {String zipFilePath = "C:\\home";String zipFileName = "lp20120301.zip";String targetFileDir = "C:\\home\\lp20120301";boolean flag = ZipToFile.unzip(zipFilePath, zipFileName, targetFileDir); if(flag) {System.out.println(">>>>>>解压成功<<<<<<");} else {System.out.println(">>>>>>解压失败<<<<<<");}}}。
java文件压缩和解压(ZipInputStream,ZipOutputStream)
java⽂件压缩和解压(ZipInputStream,ZipOutputStream) 最近在看java se 的IO 部分,看到 java 的⽂件的压缩和解压⽐较有意思,主要⽤到了两个IO流-ZipInputStream, ZipOutputStream,不仅可以对⽂件进⾏压缩,还可以对⽂件夹进⾏压缩和解压。
ZipInputStream位于java.util.zip包下。
下⾯是它的API,⽐较简单。
ZipOutputStream位于java.util.zip包下。
下⾯是它的API,⽐较简单。
⽂件的压缩1public class TestFile2 {3public static void main ( String [ ] args ) throws IOException4 {5// new a file input stream6 FileInputStream fis = new FileInputStream (7 "/home/liangruihua/ziptest/1.txt" ) ;8 BufferedInputStream bis = new BufferedInputStream ( fis ) ;910// new a zipPutputStream11// /home/liangruihua/ziptest/1.zip -- the out put file path and12// name13 ZipOutputStream zos = new ZipOutputStream (14new FileOutputStream (15 "/home/liangruihua/ziptest/1.zip" ) ) ;16 BufferedOutputStream bos = new BufferedOutputStream ( zos ) ;1718// set the file name in the .zip file19 zos.putNextEntry ( new ZipEntry ( "1.txt" ) ) ;2021// set the declear22 zos.setComment ( "by liangruihua test!" ) ;2324byte [ ] b = new byte [ 100 ] ;25while ( true )26 {27int len = bis.read ( b ) ;28if ( len == - 1 )29break ;30 bos.write ( b , 0 , len ) ;31 }32 fis.close ( ) ;33 zos.close ( ) ;34 }35 }⽂件夹的压缩1public class TestDir2 {3public static void main ( String [ ] args ) throws IOException4 {5// the file path need to compress6 File file = new File ( "/home/liangruihua/ziptest/test" ) ;7 ZipOutputStream zos = new ZipOutputStream (8new FileOutputStream (9 "/home/liangruihua/ziptest/test.zip" ) ) ;1011// judge the file is the directory12if ( file.isDirectory ( ) )13 {14// get the every file in the directory15 File [ ] files = file.listFiles ( ) ;1617for ( int i = 0 ; i < files.length ; i ++ )18 {19// new the BuuferedInputStream20 BufferedInputStream bis = new BufferedInputStream (21new FileInputStream (22 files [ i ] ) ) ;23// the file entry ,set the file name in the zip24// file25 zos.putNextEntry ( new ZipEntry ( file26 .getName ( )27 + file.separator28 + files [ i ].getName ( ) ) ) ;29while ( true )30 {31byte [ ] b = new byte [ 100 ] ;32int len = bis.read ( b ) ;33if ( len == - 1 )34break ;35 zos.write ( b , 0 , len ) ;36 }3738// close the input stream39 bis.close ( ) ;40 }4142 }43// close the zip output stream44 zos.close ( ) ;45 }46 }⽂件的解压1public class TestZipInputStream2 {3public static void main ( String [ ] args ) throws ZipException ,4 IOException5 {6// get a zip file instance7 File file = new File ( "/home/liangruihua/ziptest/test.zip" ) ;89// get a ZipFile instance10 ZipFile zipFile = new ZipFile ( file ) ;1112// create a ZipInputStream instance13 ZipInputStream zis = new ZipInputStream ( new FileInputStream (14 file ) ) ;1516// create a ZipEntry instance , lay the every file from17// decompress file temporarily18 ZipEntry entry = null ;1920// a circle to get every file21while ( ( entry = zis.getNextEntry ( ) ) != null )22 {23 System.out.println ( "decompress file :"24 + entry.getName ( ) ) ;2526// define the path to set the file27 File outFile = new File ( "/home/liangruihua/ziptest/"28 + entry.getName ( ) ) ;2930// if the file's parent directory wasn't exits ,than31// create the directory32if ( ! outFile.getParentFile ( ).exists ( ) )33 {34 outFile.getParentFile ( ).mkdir ( ) ;35 }3637// if the file not exits ,than create the file38if ( ! outFile.exists ( ) )39 {40 outFile.createNewFile ( ) ;41 }4243// create an input stream44 BufferedInputStream bis = new BufferedInputStream (45 zipFile.getInputStream ( entry ) ) ;4647// create an output stream48 BufferedOutputStream bos = new BufferedOutputStream ( 49new FileOutputStream ( outFile ) ) ;50byte [ ] b = new byte [ 100 ] ;51while ( true )52 {53int len = bis.read ( b ) ;54if ( len == - 1 )55break ;56 bos.write ( b , 0 , len ) ;57 }58// close stream59 bis.close ( ) ;60 bos.close ( ) ;61 }62 zis.close ( ) ;6364 }65 }。
Java实现文件压缩与解压[zip格式,gzip格式]
Java实现⽂件压缩与解压[zip格式,gzip格式]Java实现ZIP的解压与压缩功能基本都是使⽤了Java的多肽和递归技术,可以对单个⽂件和任意级联⽂件夹进⾏压缩和解压,对于⼀些初学者来说是个很不错的实例。
zip扮演着归档和压缩两个⾓⾊;gzip并不将⽂件归档,仅只是对单个⽂件进⾏压缩,所以,在UNIX平台上,命令tar通常⽤来创建⼀个档案⽂件,然后命令gzip来将档案⽂件压缩。
Java I/O类库还收录了⼀些能读写压缩格式流的类。
要想提供压缩功能,只要把它们包在已有的I/O类的外⾯就⾏了。
这些类不是Reader和Writer,⽽是InputStream和OutStreamput的⼦类。
这是因为压缩算法是针对byte⽽不是字符的。
相关类与接⼝:Checksum 接⼝:被类Adler32和CRC32实现的接⼝Adler32 :使⽤Alder32算法来计算Checksum数⽬CRC32 :使⽤CRC32算法来计算Checksum数⽬CheckedInputStream :InputStream派⽣类,可得到输⼊流的校验和Checksum,⽤于校验数据的完整性CheckedOutputStream :OutputStream派⽣类,可得到输出流的校验和Checksum,⽤于校验数据的完整性DeflaterOutputStream :压缩类的基类。
ZipOutputStream :DeflaterOutputStream的⼀个⼦类,把数据压缩成Zip⽂件格式。
GZIPOutputStream :DeflaterOutputStream的⼀个⼦类,把数据压缩成GZip⽂件格式InflaterInputStream :解压缩类的基类ZipInputStream :InflaterInputStream的⼀个⼦类,能解压缩Zip格式的数据GZIPInputStream :InflaterInputStream的⼀个⼦类,能解压缩Zip格式的数据ZipEntry 类:表⽰ ZIP ⽂件条⽬ZipFile 类:此类⽤于从 ZIP ⽂件读取条⽬使⽤ZIP对多个⽂件进⾏压缩与解压Java对Zip格式类库⽀持得⽐较全⾯,得⽤它可以把多个⽂件压缩成⼀个压缩包。
如何在java中解压zip和rar文件
如何在java中解压zip和rar文件如何在java中解压zip和rar文件为了方便广大的程序员朋友,下面讲一讲如何在java中实现对zip 和rar文件的解压,一起和店铺来看看吧!一、解压rar文件。
由于WinRAR 是共享软件,并不是开源的,所以解压rar文件的前提是系统已经安装了winrar,比如本人的安装路径是:C:\\Program Files\\WinRAR\\winrar.exe然后运用ng.Process 的.相关知识来运行系统命令行来实现解压的。
winrar 命令行相关参数自己可以搜索下的网上资料很多具体代码:Java代码*** 解压rar文件(需要系统安装Winrar 软件)* @author Michael sun*/public class UnRarFile {/*** 解压rar文件** @param targetPath* @param absolutePath*/public void unRarFile(String targetPath, String absolutePath) {try {// 系统安装winrar的路径String cmd = "C:\\Program Files\\WinRAR\\winrar.exe";String unrarCmd = cmd + " x -r -p- -o+ " + absolutePath + " "+ targetPath;Runtime rt = Runtime.getRuntime();Process pre = rt.exec(unrarCmd);InputStreamReader isr = new InputStreamReader(pre.getInputStream());BufferedReader bf = new BufferedReader(isr);String line = null;while ((line = bf.readLine()) != null) {line = line.trim();if ("".equals(line)) {continue;}System.out.println(line);}bf.close();} catch (Exception e) {System.out.println("解压发生异常");}}/*** @param args*/public static void main(String[] args) {String targetPath = "D:\\test\\unrar\\";String rarFilePath = "D:\\test\\test.rar";UnRarFile unrar = new UnRarFile();unrar.unRarFile(targetPath, rarFilePath);}}二、解压zip文件由于zip是免费的,所以在jdk里提供了相应的类对zip文件的实现:java.util.zip.*,详细情况可以参考java APIJava代码/*** 解压zip文件* @author Michael sun*/public class UnzipFile {/*** 解压zip文件** @param targetPath* @param zipFilePath*/public void unzipFile(String targetPath, String zipFilePath) { try {File zipFile = new File(zipFilePath);InputStream is = new FileInputStream(zipFile);ZipInputStream zis = new ZipInputStream(is);ZipEntry entry = null;System.out.println("开始解压:" + zipFile.getName() + "...");while ((entry = zis.getNextEntry()) != null) {String zipPath = entry.getName();try {if (entry.isDirectory()) {File zipFolder = new File(targetPath + File.separator+ zipPath);if (!zipFolder.exists()) {zipFolder.mkdirs();}} else {File file = new File(targetPath + File.separator+ zipPath);if (!file.exists()) {File pathDir = file.getParentFile();pathDir.mkdirs();file.createNewFile();}FileOutputStream fos = new FileOutputStream(file); int bread;while ((bread = zis.read()) != -1) {fos.write(bread);}fos.close();}System.out.println("成功解压:" + zipPath);} catch (Exception e) {System.out.println("解压" + zipPath + "失败"); continue;}}zis.close();is.close();System.out.println("解压结束");} catch (Exception e) {e.printStackTrace();}}/*** @param args*/public static void main(String[] args) { String targetPath = "D:\\test\\unzip"; String zipFile = "D:\\test\\test.zip"; UnzipFile unzip = new UnzipFile(); unzip.unzipFile(targetPath, zipFile); }}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用Java实现zip压缩/解压缩【青鸟资源分享】由于网络带宽有限,所以数据文件的压缩有利于数据在Internet上的快速传输,同时也节省服务器的外存空间。
java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。
zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry 的数据项存储压缩数据。
与zip文件有关的几个Java类·类ZipEntrypublic ZipEntry(String name);name为指定的数据项名。
·类ZipOutputStreamZipOutputStream实现了zip压缩文件的写输出流,支持压缩和非压缩entry。
下面是它的几个函数:public ZipOutputStream(OutputStream out);∥利用输出流out构造一个ZIP输出流。
public void setMethod(int method);∥设置entry压缩方法,缺省值为DEFLATED。
public void putNextEntry(ZipEntry newe);∥如果当前的entry存在且处于激活状态时,关闭它,在zip文件中写入新的entry-newe 并将数据流定位于entry数据项的起始位置,压缩方法为setMethod指定的方法。
·类ZipInputStreamZipInputStream实现了zip压缩文件的读输入流,支持压缩和非压缩entry。
下面是它的几个函数:public ZipInputStream(InputStream in);∥利用输入流in构造一个ZIP输出流。
public ZipEntry getNextEntry();∥返回ZIP文件中的下一个entry,并将输出流定位在此entry数据项的起始位置。
public void closeEntry();∥关闭当前的zip entry,并将数据流定位于下一个entry的起始位置。
程序代码及其注释下列的程序实现了数据文件zip方式的压缩和解压缩方法。
randomData()函数随机生成50个double数据,并放在doc字符串变量中;openFile()函数读取ZIP压缩文件;saveFile()函数将随机生成的数据存到ZIP格式的压缩文件中。
1. import java.util.zip.*;2.import java.awt.event.*;3.import java.awt.*;4.import ng.Math;5.import java.io.*;6.public class TestZip extends Frame implements ActionListener {7.TextArea textarea; ∥显示数据文件的多行文本显示域8.TextField infotip; ∥显示数据文件未压缩大小及压缩大小单行文本显示域9.String doc; ∥存储随机生成的数据10.long doczipsize = 0;∥压缩数据文件的大小11.public TestZip(){12.∥生成菜单13.MenuBar menubar = new MenuBar();14.setMenuBar(menubar);15.Menu file = new Menu("File",true);16.menubar.add(file);17.MenuItem neww= new MenuItem("New");18.neww.addActionListener(this);19.file.add(neww);20.MenuItem open=new MenuItem("Open");21.open.addActionListener(this);22.file.add(open);23.MenuItem save=new MenuItem("Save");24.save.addActionListener(this);25.file.add(save);26.MenuItem exit=new MenuItem("Exit");27.exit.addActionListener(this);28.file.add(exit);29.∥随机生成的数据文件的多行文本显示域30.add("Center",textarea = new TextArea());31.∥提示文本原始大小、压缩大小的单行文本显示域32.add("South",infotip = new TextField());33.}34.public static void main(String args[]){35.TestZip ok=new TestZip();36.ok.setTitle("zip sample");37.ok.setSize(600,300);38.ok.show();39.}40.private void randomData(){41.∥随机生成50个double数据,并放在doc字符串变量中。
42.doc="";43.for(int i=1;i<51;i++){44. double rdm=Math.random()*10;45. doc=doc+new Double(rdm).toString();46. if(i%5 == 0) doc=doc+"n";47. else doc=doc+" ";48.}49.doczipsize = 0;50.showTextandInfo();51.}52.private void openFile(){53.∥打开zip文件,将文件内容读入doc字符串变量中。
54.FileDialog dlg=new FileDialog(this,"Open",FileDialog.LOA D);55.dlg.show();56.String filename=dlg.getDirectory()+dlg.getFile();57.try{58.∥创建一个文件实例59.File f=new File(filename);60.if(!f.exists()) return; ∥文件不存在,则返回61.∥用文件输入流构建ZIP压缩输入流62.ZipInputStream zipis=new ZipInputStream(new FileInputStream(f));63.zipis.getNextEntry();64.∥将输入流定位在当前entry数据项位置65.DataInputStream dis=new DataInputStream(zipis);66.∥用ZIP输入流构建DataInputStream67.doc=dis.readUTF();∥读取文件内容68.dis.close();∥关闭文件69.doczipsize = f.length();∥获取ZIP文件长度70.showTextandInfo();∥显示数据71.}72.catch(IOException ioe){73.System.out.println(ioe);74.}75.}76.private void saveFile(){77.∥打开zip文件,将doc字符串变量写入zip文件中。
78.FileDialog dlg=new FileDialog(this,"Save",FileDialog.SAVE);79.dlg.show();80.String filename=dlg.getDirectory()+dlg.getFile();81.try{82.∥创建一个文件实例83.File f=new File(filename);84.if(!f.exists()) return; ∥文件不存在,则返回85.∥用文件输出流构建ZIP压缩输出流86.ZipOutputStream zipos=new ZipOutputStream(new FileOutputStream(f));87.zipos.setMethod(ZipOutputStream.DEFLATED); ∥设置压缩方法88.zipos.putNextEntry(new ZipEntry("zip"));89.∥生成一个ZIP entry,写入文件输出流中,并将输出流定位于entry起始处。
90.DataOutputStream os=new DataOutputStream(zipos);91.∥用ZIP输出流构建DataOutputStream;92.os.writeUTF(doc);∥将随机生成的数据写入文件中93.os.close();∥关闭数据流94.doczipsize = f.length();95.∥获取压缩文件的长度96.showTextandInfo();∥显示数据97.}98.catch(IOException ioe){99.System.out.println(ioe);100.}101.}102.private void showTextandInfo(){103.∥显示数据文件和压缩信息104.textarea.replaceRange(doc,0,textarea.getText().length());tip.setText("uncompressed size: "+doc.length()+"compressed size: "+dc zipsize);106.}107.public void actionPerformed(ActionEvent e){108.String arg = e.getActionCommand();109.if ("New".equals(arg)) randomData();110.else if ("Open".equals(arg)) openFile();111.else if ("Save".equals(arg)) saveFile();112.else if ("Exit".equals(arg)){113. dispose();∥关闭窗口114. System.exit(0);∥关闭程序115.}116.else {117. System.out.println("no this command!");118.}119.}120.}复制代码Java其实很强大、但是我还是比较喜欢Android、、、为什么?因为C#拖控件习惯了、、、。