15.7.1压缩文件

//压缩流
    //ZipInputStream 解压时使用
    //ZipOutputStream 压缩时使用
    //ZipEntry条目   (不支持中文)

压缩文件

static void compress() {
		File source = new File("D:\\png\\");//源文件
		File targer = new File("D:\\zz.zip");//压缩包
		
		try(FileOutputStream fis = new FileOutputStream(targer);
			ZipOutputStream zos = new ZipOutputStream(fis) ){
				if (source.isDirectory()) {
					for(File f:source.listFiles())
					addEntry(zos,"",f);
				}else {
					addEntry(zos,"",source);
				}
			
		} catch (Exception e) {
			
			e.printStackTrace();
		
		}
	}
//	  @param zos  压缩流
//	  @param base 文件在压缩包中的路径
//	  @param source  被压缩的文件啊
    static void addEntry(ZipOutputStream zos,String base,File source) {
		if (source.isDirectory()) {
			for(File file:source.listFiles()) {
				addEntry(zos, base+source.getName()+File.separator,file);
			}
		}else {
			byte buf[] = new byte[1024];
			try(FileInputStream fis = new FileInputStream(source)) {
				int count = -1;
				//在压缩包中添加条目
				zos.putNextEntry(new ZipEntry(base+source.getName()));
				while((count=fis.read(buf))!=-1) {
					zos.write(buf, 0, count);
					zos.flush();
				}
				zos.close();//关闭条目
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		compress();
	}

15.7.2解压缩文件

static void decompression() {
		File dir = new File("zip\\");
		File source = new File("zz.zip");
		byte buf[] = new byte[1024];//缓冲区
		
		ZipEntry entry =null;
		try(FileInputStream fis = new FileInputStream(source) ;
				ZipInputStream zis = new ZipInputStream(fis)){
			while(true) {
				entry = zis.getNextEntry();//获取一个条目
				if (entry==null) { //如果是一个文件夹就跳过
					break;
				}
				if (entry.isDirectory()) { //如果是一个文件,就读出来
					continue;
				}
				
				File f = new File(dir,entry.getName());//文件的名字就是条目的名字
				if(!f.getParentFile().exists()) {//如果解压的文件不存在
					f.getParentFile().mkdirs();//创建
				}
				
				
				int count = -1;
				FileOutputStream fos = new FileOutputStream(f);
				while((count = zis.read(buf))!=-1) {
					fos.write(buf,0,count);
					fos.flush();
				}
				fos.close();
				zis.closeEntry();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	public static void main(String[] args) {
		decompression();
	}

 

你可能感兴趣的:(java)