JAVA_压缩解压缩
Java代码实现rar解压最全攻略操作
Java代码实现rar解压最全攻略操作⼀、通过[com.github.junrar]实现winrar5.0以下版本解压1、⾸先贴出来maven依赖,这⾥使⽤的是最⾼版本4.0,但是依然⽆法解决5.0及其以上的版本问题。
<!-- https:///artifact/com.github.junrar/junrar --><dependency><groupId>com.github.junrar</groupId><artifactId>junrar</artifactId><version>4.0.0</version></dependency>2、代码实现:优化了https:///fakergoing/article/details/82260699中的linux中\⽆法识别问题/*** 根据原始rar路径,解压到指定⽂件夹下* 这种⽅法只能解压rar 5.0版本以下的,5.0及其以上的⽆法解决** @param srcRarPath 原始rar路径+name* @param dstDirectoryPath 解压到的⽂件夹*/public static String unRarFile(String srcRarPath, String dstDirectoryPath) throws Exception {log.debug("unRarFile srcRarPath:{}, dstDirectoryPath:{}", srcRarPath, dstDirectoryPath);if (!srcRarPath.toLowerCase().endsWith(".rar")) {log.warn("srcFilePath is not rar file");return "";}File dstDiretory = new File(dstDirectoryPath);// ⽬标⽬录不存在时,创建该⽂件夹if (!dstDiretory.exists()) {dstDiretory.mkdirs();}// @Cleanup Archive archive = new Archive(new File(srcRarPath)); com.github.junrar 0.7版本jarAPI@Cleanup Archive archive = new Archive(new FileInputStream(new File(srcRarPath)));if (archive != null) {// 打印⽂件信息archive.getMainHeader().print();FileHeader fileHeader = archive.nextFileHeader();while (fileHeader != null) {// 解决中⽂乱码问题【压缩⽂件中⽂乱码】String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() : fileHeader.getFileNameW();// ⽂件夹if (fileHeader.isDirectory()) {File fol = new File(dstDirectoryPath + File.separator + fileName.trim());fol.mkdirs();} else { // ⽂件// 解决linux系统中\分隔符⽆法识别问题String[] fileParts = fileName.split("\\\\");StringBuilder filePath = new StringBuilder();for (String filePart : fileParts) {filePath.append(filePart).append(File.separator);}fileName = filePath.substring(0, filePath.length() - 1);File out = new File(dstDirectoryPath + File.separator + fileName.trim());if (!out.exists()) {// 相对路径可能多级,可能需要创建⽗⽬录.if (!out.getParentFile().exists()) {out.getParentFile().mkdirs();}out.createNewFile();}@Cleanup FileOutputStream os = new FileOutputStream(out);archive.extractFile(fileHeader, os);}fileHeader = archive.nextFileHeader();}} else {log.warn("rar file decompression failed , archive is null");}return dstDirectoryPath;}3、该⽅法弊端最⼤的问题就在于⽆法实现winrar5.0及其以上版本的解压问题:WinRAR5之后,在rar格式的基础上,推出了另⼀种rar,叫RAR5,winrar 官⽅并没有开源算法,jar包⽆法解析这种格式。
Java解压ZIP文件的简单操作
}
entries.add(entry);
}
unzip(zipFile, entries, outputDirectory);
}
public static void unzip(ZipFile zipFile, List<ZipEntry> entries,
MultiThreadEntry mte = new MultiThreadEntry(zipFile, zipEntry,
outputDirectory);
Thread thread = new Thread(mte);
thread.start();
}
}
e1.printStackTrace();
}
} finally {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void unzipFiles(ZipEntry zipEntry, String outputDirectory)
/*
* Use MultiThread to read each entry
*/
private static class MultiThreadEntry implements Runnable {
public static final int BUFFER_SIZE = 2048;
*/
public ZipUtils() {
}
public static void unZipDirectory(String zipFileDirectory,
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");。
Javazip解压及读取
Javazip解压及读取解压读取import com.alibaba.fastjson.JSONObject;import java.io.*;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;public class Decompressing {public static void zipUncompress(String inputFile) throws Exception {File srcFile = new File(inputFile);// 判断源⽂件是否存在if (!srcFile.exists()) {throw new Exception(srcFile.getPath() + "所指⽂件不存在");}String destDirPath = inputFile.replace(".zip", "");//创建压缩⽂件对象ZipFile zipFile = new ZipFile(srcFile);//开始解压Enumeration<?> entries = zipFile.entries();while (entries.hasMoreElements()) {ZipEntry entry = (ZipEntry) entries.nextElement();// 如果是⽂件夹,就创建个⽂件夹if (entry.isDirectory()) {srcFile.mkdirs();} else {// 如果是⽂件,就先创建⼀个⽂件,然后⽤io流把内容copy过去File targetFile = new File(destDirPath + "/" + entry.getName());// 保证这个⽂件的⽗⽂件夹必须要存在if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}targetFile.createNewFile();// 将压缩⽂件内容写⼊到这个⽂件中InputStream is = zipFile.getInputStream(entry);FileOutputStream fos = new FileOutputStream(targetFile);int len;byte[] buf = new byte[1024];while ((len = is.read(buf)) != -1) {fos.write(buf, 0, len);}// 关流顺序,先打开的后关闭fos.close();is.close();}}}public static void readFiles(String inputFile) throws Exception {File srcFile = new File(inputFile);if (srcFile.isDirectory()) {File next[] = srcFile.listFiles();for (int i = 0; i < next.length; i++) {System.out.println(next[i].getName());if(!next[i].isDirectory()){BufferedReader br = new BufferedReader(new FileReader(next[i]));List<String> arr1 = new ArrayList<>();String contentLine ;while ((contentLine = br.readLine()) != null) {JSONObject js = JSONObject.parseObject(contentLine);arr1.add(contentLine);}System.out.println(arr1);}}}}public static void main(String[] args) {try {String path = "E:\\data\\test\\aaa.zip";zipUncompress(path);readFiles(path.replace(".zip", ""));} catch (Exception e) {e.printStackTrace();}} }。
java解压缩zip文件(解决了中文文件出错)
{
System.out.println("Dir: " + entry.getName() + " skipped..");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 给定根目录,返回一个相对路径所对应的实际文件名.
*
* @param zippath
private static String getUTF8String(byte[] b, int off, int len) {
try {
String s = new String(b,off,len,"gbk");
return s;
} catch (UnsupportedEncodingException e) {
String zipDir = "d:\\abc.zip";// 要解压的压缩文件的存放路径
File file = new File(zipDir);
String realname = file.getName();
原来的java.util.zip.ZipEntry里面,要加载本地库,在这里这些代码是没有用处的,去掉就可以了,而如果不去掉,会引起链接错误,很奇怪,这几个native方法我也没有找到在哪儿使用了,sun的jdk1.4.2里留着它们做什么呢?
static {
/* load the zip library */
System.out.println(realname);
Java中ZIP压缩与解压--中文文件名乱码解决办法
Java中ZIP压缩与解压--中⽂⽂件名乱码解决办法Apache Ant有个包专门处理ZIP⽂件,可以指定⽂件名的编码⽅式。
由此可以解决问题。
例如:⽤org.apache.tools.zip.ZipOutputStream代替java.util.zip.ZipOutputStream。
java对於⽂字的编码是以 unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的⼯作,碰到中⽂档名或路径,那当然是以unicode来处理。
但是,现在市⾯上的压缩及解压缩软体,例如winzip,却是不⽀援unicode的,⼀碰到档名以unicode编码的档案,它就不处理。
那要如何才能做出让WinRar能够处理的压缩档呢?那就得从修改ZipInputStream及ZipOutputStream对於档名的编码⽅式来着⼿了。
我们可以从jdk的src.zip取得ZipInputStream及ZipOutputStream的原始码来加以修改。
⼀、ZipOutputStream.java1.从jdk的src.zip取得ZipOutputStream.java原始码,另存到⼀个新⽂件中,档名改为CnZipOutputStream.java。
2.开始修改原始码,将class名称改为CnZipOutputStream3.建构式也必须更改为CnZipOutputStream4.新增member,这个member记录编码⽅式private String encoding="UTF-8";5.再新增⼀个建构式(这个建构式可以让这个class在new的时候,设定档名的编码)public CZipOutputStream(OutputStream out,String encoding) {this(out);this.encoding=encoding;}6.找到byte[] nameBytes = getUTF8Bytes();(有⼆个地⽅),将它修改如下:byte[] nameBytes = null;try{if (this.encoding.toUpperCase().equals("UTF-8"))nameBytes =getUTF8Bytes();elsenameBytes= .getBytes(this.encoding);}catch(Exception byteE){nameBytes=getUTF8Bytes();}⼆、ZipInputStream.java1.从jdk的src.zip取得ZipInputStream.java原始码,另存到⼀个新⽂件中,档名改为CnZipInputStream.java。
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中提供了一些类用于文件压缩和解压缩,例如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 inflater用法
java inflater用法Java Inflater是用于解压缩通过Deflater压缩的数据的类。
它提供了一种在压缩数据被写入输出流时解压缩数据并读取解压后的数据的方法。
这个类是Java中非常实用的一个工具,让我们来详细了解一下它的用法。
第一步:导入Java Inflater包要在Java项目中使用Java Inflater,首先需要导入对应的Java包。
在Java中,Java Inflater是在“java.util.zip”包中的。
代码如下:```import java.util.zip.*;```在Java类的顶部放置导入语句后,您就可以在类中使用“Inflater”类了。
第二步:创建一个Inflater对象要使用Java Inflater来解压缩压缩数据,您需要创建一个Inflater对象。
这可以通过以下代码实现:```Inflater inflater = new Inflater();```通过这个语句,您已经创建了一个能够解压缩数据的Inflater对象。
第三步:设置需要解压缩的数据接下来,您需要设置要解压缩的压缩数据。
在Java中,通常是从文件或网络中读取数据并将其传递给Inflater对象。
以下是一个示例代码:```byte[] compressedData = new byte[1024];FileInputStream fileInputStream = newFileInputStream("compressed_data.gz");fileInputStream.read(compressedData);inflater.setInput(compressedData);```在这段代码中,首先通过FileInputStream从文件中读取了压缩的数据,并将其存储在一个名为“compressedData”的byte数组中。
然后,通过setInput方法将压缩数据设置为要解压缩的数据。
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中的文件压缩与解压缩方法
Java中的文件压缩与解压缩方法在日常的开发工作中,文件的压缩与解压缩是一个常见的需求。
Java作为一种广泛使用的编程语言,提供了丰富的类库和方法来实现这一功能。
本文将介绍Java中常用的文件压缩与解压缩方法,并探讨它们的优缺点以及适用场景。
一、文件压缩方法1. Zip压缩Zip是一种常见的文件压缩格式,Java提供了java.util.zip包来实现对Zip文件的压缩和解压缩操作。
使用Zip压缩文件可以将多个文件或文件夹打包成一个压缩文件,方便传输和存储。
在Java中,可以使用ZipOutputStream类来创建一个Zip文件,并使用ZipEntry类来表示Zip文件中的每个文件或文件夹。
下面是一个简单的示例代码:```javaimport java.io.*;import java.util.zip.*;public class ZipUtil {public static void zipFile(String sourceFilePath, String zipFilePath) {try {FileOutputStream fos = new FileOutputStream(zipFilePath);ZipOutputStream zos = new ZipOutputStream(fos);File file = new File(sourceFilePath);zipFile(file, file.getName(), zos);zos.close();fos.close();} catch (IOException e) {e.printStackTrace();}}private static void zipFile(File file, String fileName, ZipOutputStream zos) throws IOException {if (file.isDirectory()) {File[] files = file.listFiles();for (File f : files) {zipFile(f, fileName + "/" + f.getName(), zos);}} else {FileInputStream fis = new FileInputStream(file);ZipEntry zipEntry = new ZipEntry(fileName);zos.putNextEntry(zipEntry);byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) > 0) {zos.write(buffer, 0, len);}fis.close();}}}```上述代码中,zipFile方法用于递归压缩文件夹中的所有文件和子文件夹。
java 实现tar解压代码
java 实现tar解压代码以下是使用Java实现的tar解压缩代码示例:java.importpress.archivers.ArchiveEntry;importpress.archivers.ArchiveException;importpress.archivers.ArchiveInputStream;importpress.archivers.ArchiveStreamFactory;importpress.archivers.tar.TarArchiveEntry;importpress.archivers.tar.TarArchiveInputSt ream;import java.io.;public class TarExtractor {。
public static void extractTarGz(String inputFilePath, String outputDirectory) throws IOException, ArchiveException {。
try (InputStream fileStream = new FileInputStream(inputFilePath);InputStream buffer = new BufferedInputStream(fileStream);InputStream gzipStream = new GzipCompressorInputStream(buffer);ArchiveInputStream input = newArchiveStreamFactory().createArchiveInputStream(gzipStream)) {。
ArchiveEntry entry;while ((entry = input.getNextEntry()) != null) {。
if (entry.isDirectory()) {。
java压缩文件解压:调用WinRAR5命令强于自己写代码实现
java压缩⽂件解压:调⽤WinRAR5命令强于⾃⼰写代码实现最近,⼿上维护着⼀个⼏年前的系统,技术是⽤的JSP+Strust2,系统提供了rar和zip两种压缩格式的解压功能,后台是⽤java实现的1、解压rar格式,采⽤的是java-unrar-0.3.jar2、解压zip格式,采⽤的是commons-compress-1.4.1.jar但最近根据⽤户反馈的问题,发现系统存在两个关于压缩⽂件解压的问题:1、有些压缩⽂件解压之后出现中⽂乱码;2、有些压缩⽂件根本不能解压为了弥补上述两个问题,在之前代码的基础上打了⼀些补丁,来解决zip压缩包乱码的问题,思路⼤概是:1、采⽤GBK编码解压2、递归遍历解压的⽂件名是否存在中⽂乱码,这⽤到了⽹上很常⽤的中⽂检测正则表⽰式,[\u4e00-\u9fa5]+3、如果存在中⽂乱码,则采⽤UTF-8编码解压替换后,还是有⼈反映乱码问题,烦~~~第⼆个问题报错如下(出现在有些rar格式解压时):WARNING: exception in archive constructor maybe file is encrypted or curruptde.innosystec.unrar.exception.RarException: badRarArchiveat de.innosystec.unrar.Archive.readHeaders(Archive.java:238)at de.innosystec.unrar.Archive.setFile(Archive.java:122)at de.innosystec.unrar.Archive.<init>(Archive.java:106)at de.innosystec.unrar.Archive.<init>(Archive.java:96)at com.reverse.zipFile.CopyOfZipFileUtil.unrar(CopyOfZipFileUtil.java:242)at com.reverse.zipFile.CopyOfZipFileUtil.main(CopyOfZipFileUtil.java:303)借助百度、⾕歌找资料发现:1、java解压⽂件有两种⽅式,⼀是⾃⼰写代码,⼆是调⽤压缩软件CMD执⾏2、第⼆个错误是由于WinRAR5之后,在rar格式的基础上,推出了另⼀种rar,叫RAR5,⽽java-unrar解析不了这种格式查看rar格式属性可以通过右键 —> 属性查看,如图因此需要舍弃代码解压的⽅式,改为CMD调⽤的⽅式,虽然压缩软件有很多,但从⽹上能找到执⾏命令的,也就WinRAR了,所以我们采⽤WinRAR5之后的版本解决,5之前的版本肯定是不⾏的了使⽤cmd⽅式效果如何呢?既能解决中⽂乱码问题,⼜能解压RAR5压缩⽂件,⽽且代码量还更少了,⽀持的格式也更多了。
java解压代码
Java解压代码1. 简介在日常开发过程中,我们经常会遇到需要对文件进行解压缩的情况。
Java提供了多种方式来解压文件,本文将详细介绍Java解压代码的实现方法和常用技巧。
2. 解压方式Java提供了多种解压方式,包括使用ZipInputStream和ZipEntry类、使用Java.util.zip包、使用第三方库等。
下面将详细介绍这些方式的使用方法。
2.1 使用ZipInputStream和ZipEntry类ZipInputStream和ZipEntry类是Java提供的用于处理Zip文件的工具类。
通过ZipInputStream可以逐个读取Zip文件中的Entry,并将其解压到指定目录。
下面是一个使用ZipInputStream和ZipEntry类解压Zip文件的示例代码:import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.io.FileOutputStream;import java.io.IOException;public class UnzipExample {public static void main(String[] args) {String zipFilePath = "path/to/your/zip/file.zip";String destDir = "path/to/your/destination/directory/";try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zip FilePath))) {ZipEntry entry = zipIn.getNextEntry();while (entry != null) {String filePath = destDir + File.separator + entry.getName();if (!entry.isDirectory()) {extractFile(zipIn, filePath);} else {File dir = new File(filePath);dir.mkdirs();}zipIn.closeEntry();entry = zipIn.getNextEntry();}} catch (IOException e) {e.printStackTrace();}}private static void extractFile(ZipInputStream zipIn, String filePath) thr ows IOException {try (FileOutputStream fos = new FileOutputStream(filePath)) {byte[] buffer = new byte[1024];int len;while ((len = zipIn.read(buffer)) > 0) {fos.write(buffer, 0, len);}}}}以上代码将解压指定路径下的Zip文件到目标目录。
javaGZIP压缩与解压缩
javaGZIP压缩与解压缩1.GZIP压缩public static byte[] compress(String str, String encoding) {if (str == null || str.length() == 0) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip;try {gzip = new GZIPOutputStream(out);gzip.write(str.getBytes(encoding));gzip.close();} catch ( Exception e) {e.printStackTrace();}return out.toByteArray();}2.GZIP解压缩public static byte[] uncompress(byte[] bytes) {if (bytes == null || bytes.length == 0) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayInputStream in = new ByteArrayInputStream(bytes);try {GZIPInputStream ungzip = new GZIPInputStream(in);byte[] buffer = new byte[256];int n;while ((n = ungzip.read(buffer)) >= 0) {out.write(buffer, 0, n);}} catch (Exception e) {e.printStackTrace();}return out.toByteArray();}3.⼯具代码集合import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;public class GZIPUtils {public static final String GZIP_ENCODE_UTF_8 = "UTF-8";public static final String GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1";public static byte[] compress(String str, String encoding) {if (str == null || str.length() == 0) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip;try {gzip = new GZIPOutputStream(out);gzip.write(str.getBytes(encoding));gzip.close();} catch ( Exception e) {e.printStackTrace();}return out.toByteArray();}public static byte[] compress(String str) throws IOException {return compress(str, GZIP_ENCODE_UTF_8);}public static byte[] uncompress(byte[] bytes) {if (bytes == null || bytes.length == 0) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayInputStream in = new ByteArrayInputStream(bytes);try {GZIPInputStream ungzip = new GZIPInputStream(in);byte[] buffer = new byte[256];int n;while ((n = ungzip.read(buffer)) >= 0) {out.write(buffer, 0, n);}} catch (Exception e) {e.printStackTrace();}return out.toByteArray();}public static String uncompressToString(byte[] bytes, String encoding) {if (bytes == null || bytes.length == 0) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayInputStream in = new ByteArrayInputStream(bytes);try {GZIPInputStream ungzip = new GZIPInputStream(in);byte[] buffer = new byte[256];int n;while ((n = ungzip.read(buffer)) >= 0) {out.write(buffer, 0, n);}return out.toString(encoding);} catch (Exception e) {e.printStackTrace();}return null;}public static String uncompressToString(byte[] bytes) {return uncompressToString(bytes, GZIP_ENCODE_UTF_8);}public static void main(String[] args) throws IOException {String s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";System.out.println("字符串长度:"+s.length());System.out.println("压缩后::"+compress(s).length);System.out.println("解压后:"+uncompress(compress(s)).length);System.out.println("解压字符串后::"+uncompressToString(compress(s)).length()); }}。
如何在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字符串的压缩与解压缩的两种方法
Java字符串的压缩与解压缩的两种⽅法应⽤场景当字符串太长,需要将字符串值存⼊数据库时,如果字段长度不够,则会出现插⼊失败;或者需要进⾏Http传输时,由于参数长度过长造成http传输失败等。
字符串压缩与解压⽅法⽅法⼀:⽤ Java8中的gzip/*** 使⽤gzip压缩字符串* @param str 要压缩的字符串* @return*/public static String compress(String str) {if (str == null || str.length() == 0) {return str;}ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip = null;try {gzip = new GZIPOutputStream(out);gzip.write(str.getBytes());} catch (IOException e) {e.printStackTrace();} finally {if (gzip != null) {try {gzip.close();} catch (IOException e) {e.printStackTrace();}}}return new sun.misc.BASE64Encoder().encode(out.toByteArray());}/*** 使⽤gzip解压缩* @param compressedStr 压缩字符串* @return*/public static String uncompress(String compressedStr) {if (compressedStr == null) {return null;}ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayInputStream in = null;GZIPInputStream ginzip = null;byte[] compressed = null;String decompressed = null;try {compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);in = new ByteArrayInputStream(compressed);ginzip = new GZIPInputStream(in);byte[] buffer = new byte[1024];int offset = -1;while ((offset = ginzip.read(buffer)) != -1) {out.write(buffer, 0, offset);}decompressed = out.toString();} catch (IOException e) {e.printStackTrace();} finally {if (ginzip != null) {try {ginzip.close();} catch (IOException e) {}}if (in != null) {try {in.close();} catch (IOException e) {}}if (out != null) {try {out.close();} catch (IOException e) {}}}return decompressed;}⽅法⼆:⽤mons.codec.binary.Base64/*** 使⽤mons.codec.binary.Base64压缩字符串* @param str 要压缩的字符串* @return*/public static String compress(String str) {if (str == null || str.length() == 0) {return str;}return Base64.encodeBase64String(str.getBytes());}/*** 使⽤mons.codec.binary.Base64解压缩* @param compressedStr 压缩字符串* @return*/public static String uncompress(String compressedStr) {if (compressedStr == null) {return null;}return Base64.decodeBase64(compressedStr);}注意事项在web项⽬中,服务器端将加密后的字符串返回给前端,前端再通过ajax请求将加密字符串发送给服务器端处理的时候,在http传输过程中会改变加密字符串的内容,导致服务器解压压缩字符串发⽣异常:java.util.zip.ZipException: Not in GZIP format解决⽅法:在字符串压缩之后,将压缩后的字符串BASE64加密,在使⽤的时候先BASE64解密再解压即可。
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 }。
JavaJar包压缩、解压使用
JavaJar包压缩、解压使⽤
什么是jar包
JAR(Java Archive)是Java的归档⽂件,它是⼀种与平台⽆关的⽂件格式,它允许将许多⽂件组合成⼀个压缩⽂件。
如何打/解包
使⽤jdk/bin/jar.exe⼯具,配置完环境变量后直接使得jar命令即可。
jar命令格式
jar {c t x u f }[ v m e 0 M i ][-C ⽬录]⽂件名…
{ctxu},这四个参数必须选选其⼀。
[v f m e 0 M i],这⼏个是可选参数,⽂件名也是必须的。
参数说明
-c 创建⼀个jar包
-t 显⽰jar中的内容列表
-x 解压jar包
-u 添加⽂件到jar包中
-f 指定jar包的⽂件名
-v 输出详细报告
-m 指定MANIFEST.MF⽂件
-0 ⽣成jar包时不压缩内容
-M 不⽣成清单⽂件MANIFEST.MF
-i 为指定的jar⽂件创建索引⽂件
-C 可在相应的⽬录下执⾏命令
关于MANIFEST.MF定义:
演⽰
往jar包添加⽂件
jar uf xxx.jar BOOT-INF/classes/application.yml
解压jar包
jar -xvf xxx.jar
打jar包,不⽣成清单⽂件,不压缩
jar -cvfM0 xxx.jar BOOT-INF/ META-INF/ org/
或者
jar -cvfM0 xxx.jar *
如果要往线上jar包添加、更新部分⽂件到jar包,这些命令也许对你有⽤。
java解压缩.gz.zip.tar.gz等格式的压缩包方法总结
java解压缩.gz.zip.tar.gz等格式的压缩包⽅法总结1、.gz⽂件是linux下常见的压缩格式。
使⽤ java.util.zip.GZIPInputStream即可,压缩是 java.util.zip.GZIPOutputStream1public static void unGzipFile(String sourcedir) {2 String ouputfile = "";3try {4//建⽴gzip压缩⽂件输⼊流5 FileInputStream fin = new FileInputStream(sourcedir);6//建⽴gzip解压⼯作流7 GZIPInputStream gzin = new GZIPInputStream(fin);8//建⽴解压⽂件输出流9 ouputfile = sourcedir.substring(0,stIndexOf('.'));10 ouputfile = ouputfile.substring(0,stIndexOf('.'));11 FileOutputStream fout = new FileOutputStream(ouputfile);1213int num;14byte[] buf=new byte[1024];1516while ((num = gzin.read(buf,0,buf.length)) != -1)17 {18 fout.write(buf,0,num);19 }2021 gzin.close();22 fout.close();23 fin.close();24 } catch (Exception ex){25 System.err.println(ex.toString());26 }27return;28 }2、zip⽂件,使⽤java.util.zip.ZipEntry 和 java.util.zip.ZipFile1/**2 * 解压缩zipFile3 * @param file 要解压的zip⽂件对象4 * @param outputDir 要解压到某个指定的⽬录下5 * @throws IOException6*/7public static void unZip(File file,String outputDir) throws IOException {8 ZipFile zipFile = null;910try {11 Charset CP866 = Charset.forName("CP866"); //specifying alternative (non UTF-8) charset12//ZipFile zipFile = new ZipFile(zipArchive, CP866);13 zipFile = new ZipFile(file, CP866);14 createDirectory(outputDir,null);//创建输出⽬录1516 Enumeration<?> enums = zipFile.entries();17while(enums.hasMoreElements()){1819 ZipEntry entry = (ZipEntry) enums.nextElement();20 System.out.println("解压." + entry.getName());2122if(entry.isDirectory()){//是⽬录23 createDirectory(outputDir,entry.getName());//创建空⽬录24 }else{//是⽂件25 File tmpFile = new File(outputDir + "/" + entry.getName());26 createDirectory(tmpFile.getParent() + "/",null);//创建输出⽬录2728 InputStream in = null;29 OutputStream out = null;30try{31 in = zipFile.getInputStream(entry);;32 out = new FileOutputStream(tmpFile);33int length = 0;3435byte[] b = new byte[2048];36while((length = in.read(b)) != -1){37 out.write(b, 0, length);38 }3940 }catch(IOException ex){41throw ex;42 }finally{43if(in!=null)44 in.close();45if(out!=null)46 out.close();47 }48 }49 }5051 } catch (IOException e) {52throw new IOException("解压缩⽂件出现异常",e);53 } finally{54try{55if(zipFile != null){56 zipFile.close();57 }58 }catch(IOException ex){59throw new IOException("关闭zipFile出现异常",ex);60 }61 }62 }6364/**65 * 构建⽬录66 * @param outputDir67 * @param subDir68*/69public static void createDirectory(String outputDir,String subDir){70 File file = new File(outputDir);71if(!(subDir == null || subDir.trim().equals(""))){//⼦⽬录不为空72 file = new File(outputDir + "/" + subDir);73 }74if(!file.exists()){75if(!file.getParentFile().exists())76 file.getParentFile().mkdirs();77 file.mkdirs();78 }79 }3、.tar.gz⽂件可以看做先⽤tar打包,再使⽤gz进⾏压缩。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// Create a buffer for reading the files
byte[] buf = new byte[1024];
try {
// Open the output file
String outFilename = "o";
OutputStream out = new FileOutputStream(oa.util.zip.*;
import java.io.*;
public class zip
{
public static void main(String[] argc)
}
}
}
// Complete the entry
out.closeEntry();
in.close();
}
{
// These are the files to include in the ZIP file
String[] filenames = new String[]{"Uzip.java", "zip.java"};
// Compress the files
for (int i=0; i<filenames.length; i++) {
FileInputStream in = new FileInputStream(filenames[i]);
}
}
}
解压缩:
import java.util.zip.*;
import java.io.*;
public class Uzip
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(filenames[i]));
// Transfer bytes from the file to the ZIP file
// Create the ZIP file
String outFilename = "outfile.zip";
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
// Close the streams
{
public static void main(String[] argc)
{
try {
// Open the ZIP file
String inFilename = "test.zip";
ZipInputStream in = new ZipInputStream(new FileInputStream(inFilename));
// Get the first entry
ZipEntry entry = in.getNextEntry();
// Complete the ZIP file
out.close();
} catch (IOException e) {
System.out.println(e.toString());
// Transfer bytes from the ZIP file to the output file
byte[] buf = new byte[1024];
int len;
out.close();
in.close();
} catch (IOException e) {
System.out.println(e.toString());