- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipInputStream;
- import java.util.zip.ZipOutputStream;
- /**
- * 對文件或文件夾進行壓縮和解壓
- *
- */
- public class ZipUtil {
- /**得到當前系統的分隔符*/
- // private static String separator = System.getProperty("file.separator");
- /**
- * 添加到壓縮文件中
- * @param out
- * @param f
- * @param base
- * @throws Exception
- */
- private void directoryZip(ZipOutputStream out, File f, String base) throws Exception {
- // 如果傳入的是目錄
- if (f.isDirectory()) {
- File[] fl = f.listFiles();
- // 創建壓縮的子目錄
- out.putNextEntry(new ZipEntry(base + "/"));
- if (base.length() == 0) {
- base = "";
- } else {
- base = base + "/";
- }
- for (int i = 0; i < fl.length; i++) {
- directoryZip(out, fl[i], base + fl[i].getName());
- }
- } else {
- // 把壓縮文件加入rar中
- out.putNextEntry(new ZipEntry(base));
- FileInputStream in = new FileInputStream(f);
- byte[] bb = new byte[10240];
- int aa = 0;
- while ((aa = in.read(bb)) != -1) {
- out.write(bb, 0, aa);
- }
- in.close();
- }
- }
- /**
- * 壓縮文件
- *
- * @param zos
- * @param file
- * @throws Exception
- */
- private void fileZip(ZipOutputStream zos, File file) throws Exception {
- if (file.isFile()) {
- zos.putNextEntry(new ZipEntry(file.getName()));
- FileInputStream fis = new FileInputStream(file);
- byte[] bb = new byte[10240];
- int aa = 0;
- while ((aa = fis.read(bb)) != -1) {
- zos.write(bb, 0, aa);
- }
- fis.close();
- System.out.println(file.getName());
- } else {
- directoryZip(zos, file, "");
- }
- }
- /**
- * 解壓縮文件
- *
- * @param zis
- * @param file
- * @throws Exception
- */
- private void fileUnZip(ZipInputStream zis, File file) throws Exception {
- ZipEntry zip = zis.getNextEntry();
- if (zip == null)
- return;
- String name = zip.getName();
- File f = new File(file.getAbsolutePath() + "/" + name);
- if (zip.isDirectory()) {
- f.mkdirs();
- fileUnZip(zis, file);
- } else {
- f.createNewFile();
- FileOutputStream fos = new FileOutputStream(f);
- byte b[] = new byte[10240];
- int aa = 0;
- while ((aa = zis.read(b)) != -1) {
- fos.write(b, 0, aa);
- }
- fos.close();
- fileUnZip(zis, file);
- }
- }
- /**
- * 根據filePath創建相應的目錄
- * @param filePath
- * @return
- * @throws IOException
- */
- private File mkdirFiles(String filePath) throws IOException{
- File file = new File(filePath);
- if(!file.getParentFile().exists()){
- file.getParentFile().mkdirs();
- }
- file.createNewFile();
- return file;
- }
- /**
- * 對zipBeforeFile目錄下的文件壓縮,保存爲指定的文件zipAfterFile
- *
- * @param zipBeforeFile 壓縮之前的文件
- * @param zipAfterFile 壓縮之後的文件
- */
- public void zip(String zipBeforeFile, String zipAfterFile) {
- try {
- ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(mkdirFiles(zipAfterFile)));
- fileZip(zos, new File(zipBeforeFile));
- zos.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 解壓縮文件unZipBeforeFile保存在unZipAfterFile目錄下
- *
- * @param unZipBeforeFile 解壓之前的文件
- * @param unZipAfterFile 解壓之後的文件
- */
- public void unZip(String unZipBeforeFile, String unZipAfterFile) {
- try {
- ZipInputStream zis = new ZipInputStream(new FileInputStream(unZipBeforeFile));
- File f = new File(unZipAfterFile);
- f.mkdirs();
- fileUnZip(zis, f);
- zis.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
使用zip對文件或文件夾進行壓縮, 解壓縮
使用zip對文件或文件夾進行壓縮, 解壓縮
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.