电脑文件zip如何压缩(java实现对zip文件的压缩)
一、java实现压缩为zip
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.OutputStream;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipOutputStream;
publicclassZipUtils{
privatestaticfinalintBUFFER_SIZE=2*1024;
publicstaticvoiddirFile(Filedir){
File[]files=dir.listFiles();//得到File数组,获得目录下所有文件
for(Filefile:files){//遍历所有的子目录和文件
if(file.isDirectory()){
dirFile(file);//如果是目录递归调用dirFile()
}
//成功压缩文件后,对原文件进行删除
file.delete();
}
//顺带把对应的目录进行删除
dir.delete();
}
/**
*压缩成ZIP方法1
*@paramsrcDir压缩文件夹路径
*@paramout压缩文件输出流
*@paramKeepDirstructure是否保留原来的目录结构,true:保留目录结构;
*false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
*@throwsRuntimeException压缩失败会抛出运行时异常
*/
publicstaticvoidtoZip(StringsrcDir,OutputStreamout,booleanKeepDirstructure)
throwsRuntimeException{
longstart=System.currentTimeMillis();
ZipOutputStreamzos=null;
try{
zos=newZipOutputStream(out);
FilesourceFile=newFile(srcDir);
compress(sourceFile,zos,sourceFile.getName(),KeepDirstructure);
longend=System.currentTimeMillis();
System.out.println("压缩完成,耗时:"+(end-start)+"ms");
}catch(Exceptione){
thrownewRuntimeException("ziperrorfromZipUtils",e);
}finally{
if(zos!=null){
try{
zos.close();
}catch(IOExceptione){
e.printstacktrace();
}
}
}
}
/**
*递归压缩方法
*@paramsourceFile源文件
*@paramzoszip输出流
*@paramname压缩后的名称
*@paramKeepDirstructure是否保留原来的目录结构,会压缩失败)
*@throwsException
*/
privatestaticvoidcompress(FilesourceFile,ZipOutputStreamzos,Stringname,
booleanKeepDirstructure)throwsException{
byte[]buf=newbyte[BUFFER_SIZE];
if(sourceFile.isFile()){
//向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字
zos.putNextEntry(newZipEntry(name));
//文件到zip输出流中
intlen;
FileInputStreamin=newFileInputStream(sourceFile);
while((len=in.read(buf))!=-1){
zos.write(buf,len);
}
//Completetheentry
zos.closeEntry();
in.close();
}else{
File[]listFiles=sourceFile.listFiles();
if(listFiles==null||listFiles.length==0){
//需要保留原来的文件结构时,需要对空文件夹进行处理
if(KeepDirstructure){
//空文件夹的处理
zos.putNextEntry(newZipEntry(name+"/"));
//没有文件,不需要文件的
zos.closeEntry();
}
}else{
for(Filefile:listFiles){
//判断是否需要保留原来的文件结构
if(KeepDirstructure){
//注意:file.getName()前面需要带上父文件夹的名字加一斜杠,
//不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了
compress(file,name+"/"+file.getName(),KeepDirstructure);
}else{
compress(file,file.getName(),KeepDirstructure);
}
}
}
}
}
}
B. java解压zip或者tar.gz压缩包,如何获得被压缩文件的
使用Java处理ZIP和TGZ压缩包涉及ZipInputStream、ZipOutputStream和ZipFile类。当项目需要上传或下载ZIP包时,开发者通常会利用这些类进行操作。
在基础概念层面,压缩文件的生成涉及读取一个文件夹内容,创建ZipEntry并将其放入ZipOutputStream。然后,通过InputStream读取源文件内容,将其写入ZipOutputStream。这种流程形成了压缩文件的创建。
解压过程涉及一个特殊的File类,称为ZipFile。使用Enumeration类可以读取压缩文件夹中的文件。解压文件的过程开始于读取压缩文件夹中的文件,生成InputStream后将其写入解压输出流。此操作实现了文件的解压缩。
总结来说,本文介绍了Java中压缩文件的压缩与解压方式,提供了相关类的使用方法。希望对读者在项目开发中处理文件压缩与解压问题有所帮助。如果本文对您有帮助,请给予支持。