压缩文件的解析方式

java解析压缩文件,压缩文件中有zip格式和rar格式,格式不相同对应的方法就不同

首先进行解压缩时,我们需要用到第三方库,分别是 slf4j-api-2.0.13.jar和junrar-7.5.5.jar

然后我们先定义两个方法,用来分别解压缩zip格式和rar格式:

 public static void unzip(String path){}
public static void unrar(String path){}

使用main方法来判断如果后缀为zip则调用unzip方法,如果后缀为rar则调用unrar方法:

public static void main(String[] args) {
        String path="D:\\猿究院\\zip_rar案例\\实验案例.rar";
        //String path="D:\\猿究院\\zip_rar案例\\easyftp-server-1.7.0.10-cn.zip";

        if(path.endsWith(".zip")) {
            unzip(path);
        } else if (path.endsWith(".rar")) {
            unrar(path);
        }
    }

zip格式的文件

解压缩zip或rar需要用到I/O流,文件操作以及第三方库的使用,对于zip格式的文件java标准库提供了 java.util.zip 包,其中用到ZipInputStream 和ZipOutputStream流来进行读取和写入zip文件

步骤:

1、先跟据原始路径创建源文件(file对象)

2、通过源文件创建得到新的“.zip”文件的根目录

3、判断此根目录若存在,则调用common-io包提供的FileUtil工具类进行删除,然后创建新的根目录

4、使用ZipInputStream用于进行zip格式的压缩文件输入流

5、循环遍历压缩包中的每个子目录或子文件(ZipEntry类型的对象)并判断其若不为空,则创建子目录或子文件(File对象)

6、再判断遍历得到的zipEntry对象若是子目录则创建新子目录(file.mkdir()),若是文件创建新子文件(file.createNewFile())

7、读取当前压缩包中的子文件,并通过输出流写入到新子文件中

//解压缩zip格式
    public static void unzip(String path){
        //根据原始路径(字符串),创建源文件(File对象)
        File sourceFile=new File(path);

        //根目录
        String sourceFileName=sourceFile.getName();
        File rootDir=new File(sourceFile.getParent()+"\\"+sourceFileName.substring(0,sourceFileName.lastIndexOf(".")));

        if(rootDir.exists()){
            //如果存在,则删除
            //rootDir.delete();//仅能删除空目录

            //使用common-io包提供的FileUtils工具类进行删除
            try {
                FileUtils.deleteDirectory(rootDir);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        //创建根目录
        rootDir.mkdir();

        //ZipInputStream:用于进行zip格式的压缩文件输入流
        try(ZipInputStream in=new ZipInputStream(new FileInputStream(sourceFile))){
            //遍历压缩包中的每个子目录或子文件(ZipEntry类型的对象)
            ZipEntry zipEntry=null;
            while((zipEntry=in.getNextEntry())!=null){
                //创建子目录或子文件(File对象)
                File file=new File(rootDir.getPath()+"\\"+zipEntry.getName());
                if(zipEntry.isDirectory()){
                    //物理磁盘创建新子目录
                    file.mkdir();
                }else{
                    //物理磁盘创建新子文件
                    file.createNewFile();
                    //读取当前压缩包中的子文件,并通过输出流写入到新子文件中
                    try(FileOutputStream out=new FileOutputStream(file)){
                        byte[] buff=new byte[1024];
                        int len=-1;
                        while((len=in.read(buff))!=-1){
                            out.write(buff,0,len);
                        }
                    }
                }
            }
        }  catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

rar格式的文件

步骤:

1、先跟据原始路径创建源文件(file对象)

2、通过源文件创建得到新的“.zip”文件的根目录

3、判断此根目录若存在,则调用common-io包提供的FileUtil工具类进行删除,然后创建新的根目录

4、创建Archive对象,用于读取rar压缩文件格式

5、获取压缩文件中的所有子目录或子文件(FileHeader对象)

6、按照子目录(子文件)名称排序

7、再判断遍历得到的FileHeader对象若是子目录则创建新子目录(file.mkdir()),若是文件创建新子文件(file.createNewFile())

8、获取压缩包中的子文件输入流,并复制文件输入流至新子文件

 //解压缩rar格式
    public static void unrar(String path){
        //创建解压缩根目录
        File rarFile=new File(path);
        File rootDir=new File(rarFile.getParent()+"\\"+rarFile.getName().substring(0,rarFile.getName().lastIndexOf(".")));
        if(rootDir.exists()){
            try{
                FileUtils.deleteDirectory(rootDir);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        rootDir.mkdir();

        //创建Archive对象,用于读取rar压缩文件格式
        try(Archive archive=new Archive(new FileInputStream(path))){
            //获取压缩文件中的所有子目录或子文件(FileHeader对象)
            List<FileHeader> fileHeaderList = archive.getFileHeaders();

            //按照子目录(子文件)名称排序
            fileHeaderList.sort(new Comparator<FileHeader>(){
                @Override
                public int compare(FileHeader o1, FileHeader o2) {
                    return o1.getFileName().compareTo(o2.getFileName());
                }
            });
            //遍历子目录和子文件
            for(FileHeader fd:fileHeaderList){
                File f=new File(rootDir.getPath()+"\\"+fd.getFileName());
                if(fd.isDirectory()){
                    //创建新子目录
                    f.mkdir();
                }else {
                    //创建新子文件
                    f.createNewFile();
                    //获取压缩包中的子文件
                    InputStream in=archive.getInputStream(fd);

                    FileUtils.copyInputStreamToFile(in,f);
                }
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (RarException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SHP文件是存储地理空间数据的一种常见的GIS矢量数据格式。通常情况下,SHP文件是由多个文件组成的集合,包括.shp、.shx和.dbf文件。其中,.shp文件包含了空间几何对象的几何信息,.shx文件是shp文件的索引文件,用于快速访问.shp文件中的几何对象,.dbf文件则存储了与几何对象相关的属性数据。 要对SHP文件进行解析,首先需要了解其文件结构。可以使用第三方库或软件进行解析,如GDAL、ArcGIS、QGIS等。以GDAL为例,可以使用GDAL库中的Open函数读取.shp文件,并获取其中的几何对象和属性数据。通过对shp文件的读取,可以了解其坐标系信息、几何对象类型(如点、线、面等)、坐标点的位置等。 对于压缩的SHP文件,通常是将多个SHP文件进行压缩打包而成的。解析时需要先解压缩文件,即还原出原始的.shp、.shx和.dbf文件。然后再按照上述方法对解压缩后的文件进行解析。 在解析SHP文件时,还可以进行一些其他的操作,比如对空间几何对象进行空间分析、属性查询等。通过解析SHP文件,可以获取到地理数据中的几何信息和属性信息,进而进行地理空间分析和可视化等操作。 总之,解析SHP文件是指对其文件结构进行解析,提取出其中的几何对象和属性数据。通过了解SHP文件的文件结构和使用相关的库或软件,可以对SHP文件进行解析和进一步的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值