Java实现Zip压缩包解压详解编程语言

    对zip压缩包的解压是比较常见的应用场景,java代码的实现也很简单。废话不多说,直接上代码吧
一、代码
	/** 
	 * zip解压   
	 * @param srcFile        zip源文件 
	 * @param destDirPath	  解压后的目标文件夹 
	 * @throws RuntimeException 解压失败会抛出运行时异常 
	 */ 
	public static void unZip(File srcFile, String destDirPath) throws RuntimeException { 
		long start = System.currentTimeMillis(); 
		// 判断源文件是否存在 
		if (!srcFile.exists()) { 
			throw new RuntimeException(srcFile.getPath() + "所指文件不存在"); 
		} 
		// 开始解压 
		ZipFile zipFile = null; 
		try { 
			zipFile = new ZipFile(srcFile); 
			Enumeration<?> entries = zipFile.entries(); 
			while (entries.hasMoreElements()) { 
				ZipEntry entry = (ZipEntry) entries.nextElement(); 
				System.out.println("解压" + entry.getName()); 
				// 如果是文件夹,就创建个文件夹 
				if (entry.isDirectory()) { 
					String dirPath = destDirPath + "/" + entry.getName(); 
					File dir = new File(dirPath); 
					dir.mkdirs(); 
				} else { 
					// 如果是文件,就先创建一个文件,然后用io流把内容copy过去 
					File targetFile = new File(destDirPath + "/" + entry.getName()); 
					// 保证这个文件的父文件夹必须要存在 
					if(!targetFile.getParentFile().exists()){ 
						targetFile.getParentFile().mkdirs(); 
					} 
					targetFile.createNewFile(); 
					// 将压缩文件内容写入到这个文件中 
					InputStream is = zipFile.getInputStream(entry); 
					FileOutputStream fos = new FileOutputStream(targetFile); 
					int len; 
					byte[] buf = new byte[BUFFER_SIZE]; 
					while ((len = is.read(buf)) != -1) { 
						fos.write(buf, 0, len); 
					} 
					// 关流顺序,先打开的后关闭 
					fos.close(); 
					is.close(); 
				} 
			} 
			long end = System.currentTimeMillis(); 
			System.out.println("解压完成,耗时:" + (end - start) +" ms"); 
		} catch (Exception e) { 
			throw new RuntimeException("unzip error from ZipUtils", e); 
		} finally { 
			if(zipFile != null){ 
				try { 
					zipFile.close(); 
				} catch (IOException e) { 
					e.printStackTrace(); 
				} 
			} 
		} 
	}
 

1

    /**

2

     * zip解压  

3

     * @param srcFile        zip源文件

4

     * @param destDirPath     解压后的目标文件夹

5

     * @throws RuntimeException 解压失败会抛出运行时异常

6

     */

7

    public static void unZip(File srcFile, String destDirPath) throws RuntimeException {

8

        long start = System.currentTimeMillis();

9

        // 判断源文件是否存在

10

        if (!srcFile.exists()) {

11

            throw new RuntimeException(srcFile.getPath() + "所指文件不存在");

12

        }

13

        // 开始解压

14

        ZipFile zipFile = null;

15

        try {

16

            zipFile = new ZipFile(srcFile);

17

            Enumeration<?> entries = zipFile.entries();

18

            while (entries.hasMoreElements()) {

19

                ZipEntry entry = (ZipEntry) entries.nextElement();

20

                System.out.println("解压" + entry.getName());

21

                // 如果是文件夹,就创建个文件夹

22

                if (entry.isDirectory()) {

23

                    String dirPath = destDirPath + "/" + entry.getName();

24

                    File dir = new File(dirPath);

25

                    dir.mkdirs();

26

                } else {

27

                    // 如果是文件,就先创建一个文件,然后用io流把内容copy过去

28

                    File targetFile = new File(destDirPath + "/" + entry.getName());

29

                    // 保证这个文件的父文件夹必须要存在

30

                    if(!targetFile.getParentFile().exists()){

31

                        targetFile.getParentFile().mkdirs();

32

                    }

33

                    targetFile.createNewFile();

34

                    // 将压缩文件内容写入到这个文件中

35

                    InputStream is = zipFile.getInputStream(entry);

36

                    FileOutputStream fos = new FileOutputStream(targetFile);

37

                    int len;

38

                    byte[] buf = new byte[BUFFER_SIZE];

39

                    while ((len = is.read(buf)) != -1) {

40

                        fos.write(buf, 0, len);

41

                    }

42

                    // 关流顺序,先打开的后关闭

43

                    fos.close();

44

                    is.close();

45

                }

46

            }

47

            long end = System.currentTimeMillis();

48

            System.out.println("解压完成,耗时:" + (end - start) +" ms");

49

        } catch (Exception e) {

50

            throw new RuntimeException("unzip error from ZipUtils", e);

51

        } finally {

52

            if(zipFile != null){

53

                try {

54

                    zipFile.close();

55

                } catch (IOException e) {

56

                    e.printStackTrace();

57

                }

58

            }

59

        }

60

    }

二、小结
    解压的代码并不复杂,不过有个关键点是:创建文件时,需要保证该文件所在的文件夹必须存在。
    如果对Java实现zip压缩感兴趣,可看我上一篇博客:
http://www.cnblogs.com/zeng1994/p/7862288.html

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/15520.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论