Java 输入输出了下的简单解压操作

来源:互联网 发布:telnet 内网ip 端口 编辑:程序博客网 时间:2024/06/07 19:18
  • 简要介绍
    **在Java学习过程中,接触到输入输出流的概念,简介了压缩与解压简单技术,实际实现解压过程遇到了一个问题,如果多个文件夹多个文档如何顺序解压。
    本文以http://blog.csdn.net/isea533/article/details/7995472博客所写Java解压技术,进行总结了下,并总结过程中遇到的错误之处。**

  • 思路简析
    首先声明解压文件,如上文所述如果包含多个文件夹,则存在多个解压文件进入点(Entry),则通过Enumeration(枚举)方式,循环遍历每个进入点,例如如下图1所示有两个文件夹,每次进入点路径如图2所示,通过对象强制转换到ZipEntry,随后将目录逐层创建,如果只是单一目录文件夹,则如果不存在就将创建文件夹(在此声明,解压过程文件夹是单独创建,非解压创建),然后退出循环,不进行任何输入输出流操作。如果进入点遇到文件或文档,则将通过输入输出流方式进行解压操作。
    图1:
    这里写图片描述
    图2:
    这里写图片描述

  • 易错误点
    **1、在编写过程中,错误使用了if-else if 语句,此语句如果第一个if判断正确,则不会进行else if 语句判断。
    2、运行过程遇到文件夹拒绝访问错误,X:/XX拒绝访问,通过博客http://blog.csdn.net/j04110414/article/details/17795545所写才了解到,FileOutputStream使用过程中,需要注意你针对的是文件而不是文件夹,文件夹是无法进行输出操作的。
    3、本次编写jdk版本为1.7+,前文所写压缩博客无法解决如果文件名为汉字,将无法正确解压,我们只要在声明ZipFile 时,指定字符集为GBK格式,则可以解决,如下:
    ZipFile zipFile = new ZipFile(zipfile, Charset.forName("gbk"));**

  • 代码简析
    UnZipFiles类

public class UnZipFiles {    public UnZipFiles() {        // TODO Auto-generated constructor stub    }    public static void unZipFiles(String zipFilePath, String targetDir) throws IOException {        // TODO Auto-generated constructor stub        unZipFiles(new File(zipFilePath), targetDir);    }    @SuppressWarnings("resource")    public static void unZipFiles(File zipfile, String targetDir){        // TODO Auto-generated method stub        File file = new File(targetDir);        if(!file.exists()){            file.mkdirs();        }        try {            ZipFile zipFile = new ZipFile(zipfile, Charset.forName("gbk"));             for (Enumeration entries = zipFile.entries(); entries.hasMoreElements();) {                ZipEntry entry = (ZipEntry) entries.nextElement();                String subDir = (targetDir + entry.getName()).replace("\\", "/");                System.out.println(subDir);                File subFile = new File(subDir.substring(0, subDir.lastIndexOf("/")));                if (!subFile.exists()) {                    subFile.mkdirs();                                   }                if (new File(subDir).isDirectory()) {                    continue;                               }                InputStream fIn = zipFile.getInputStream(entry);                FileOutputStream fOut = new FileOutputStream(subDir);                int b;                while ((b = fIn.read()) != -1) {                    fOut.write(b);                }                fIn.close();                fOut.close();               }               } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }     }}

主函数:

public static void main(String[] args) throws IOException {        File file = new File("f:/test.zip");        String path = "f:/jieya/";          UnZipFiles unZipFiles = new UnZipFiles();        unZipFiles.unZipFiles(file, path);    }

测试成功

0 0
原创粉丝点击