Java实现对压缩文件的解压
详情见代码解析:
package my;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class Test {
public static void main(String[] args) throws Exception
{
//准备一个ZIP文件
//注意:文件的位置,直接放在项目的根目录下
File srcFile=new File("D:\\Js/Js.zip");
//指定目标压缩文件的解压缩位置
File dstDir=new File("E:/example/");
dstDir.mkdirs();
//在Windows下指定GBK,在Linux下一般为utf-8
//若字符集不匹配,则文件名和路径中的中文是乱码
ZipFile zipFile=new ZipFile(srcFile,Charset.forName("GBK"));
int fileCount=0;
int totalSize=0;
//枚举---返回zip文件项的枚举。
Enumeration<?>entries=zipFile.entries();
while(entries.hasMoreElements())
{
ZipEntry entry=(ZipEntry)entries.nextElement();
if(entry.isDirectory()) continue;
System.out.println("处理文件:"+entry.getName());
//entry.getName()获取条目的路径
File dstFile=new File(dstDir,entry.getName());
dstFile.getParentFile().mkdirs(); //创建所在的子目录
//从zip文件中解出数据
InputStream inputStream=zipFile.getInputStream(entry);
OutputStream outputStream=new FileOutputStream(dstFile);
try
{
byte[] buf=new byte[4096];
while(true)
{
int n=inputStream.read(buf);
if(n<0)break;
outputStream.write(buf,0,n);
}
}
finally {
// 确保文件被关闭
try{ inputStream.close(); } catch (Exception e){}
try{ outputStream.close(); } catch (Exception e){}
}
}
// 最后要记得关闭文件
zipFile.close();
}
}