java文件壓縮流

壓縮文件

創建OutputStream
創建ZipOutputStream
創建條目ZipEntry
創建InputStream
文件讀寫

解壓文件

創建InputStream
創建ZipInputStream
獲取條目getNextEntry
創建OutputStream
文件讀寫

實例

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import javax.print.attribute.standard.Compression;

public class Demo {
	
	//文件壓縮
	public void compress() {
		File source = new File("E://ccnu//");
		File target = new File("E://ccnu.zip");
		FileOutputStream f;
		ZipOutputStream z;
		try {
			f = new FileOutputStream(target);
			z = new ZipOutputStream(f);
			if(source.isDirectory()) {
				for(File file:source.listFiles()) {
					zip(z, "", file);
				}
			}else {
				zip(z, "", source);
			}
			z.close();
			f.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	
	public void zip(ZipOutputStream a, String string, File file) {
		if(file.isDirectory()) {
			for(File f:file.listFiles()) {
				zip(a, string+file.getName()+File.separator, file);
			}
		}else {
			byte[] b = new byte[1024];
			try {
				FileInputStream fi = new FileInputStream(file);
				int count = -1;
				a.putNextEntry(new ZipEntry(string+file.getName()));
				while((count = fi.read(b)) != -1) {
					a.write(b, 0, count);
					a.flush();
				}
				fi.close();
				a.closeEntry();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		}
	}
	
	//文件解壓
	public void decompress() {
		
		File f =new File("E:\\zip\\");
		File source = new File("E:\\ccnu.zip");
		FileInputStream fis;
		try {
			fis = new FileInputStream(source);
			ZipInputStream zis = new ZipInputStream(fis); 
			byte[] by = new byte[1024];
			ZipEntry ze = null;
			int count = -1;
			FileOutputStream out = null;
			if(!f.exists()) {
				f.mkdirs();
			}
	
			while (true) {
				ze = zis.getNextEntry();
				out = new FileOutputStream(new File(f, ze.getName()));
				if (ze.isDirectory()) {
					continue;
				} 
				if(ze == null) {
					break;
				}
				while((count = zis.read(by)) != -1) {
					out.write(by, 0, count);
					out.flush();
				}
				out.close();
				zis.closeEntry();
			}
			zis.close();
			fis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo demo = new Demo();
        demo.decompress();
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章