[java]读取ZIP以及RAR(不解压)

通过输入流读取压缩文件中的每一个文件,返回list,包含文件名以及base64编码

ZIP

    public static List readZipToInputStream(InputStream inputStream) throws Exception {
        List<Map> list = new ArrayList<>();

        //转化文件流为压缩文件流
        ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("gbk"));
        ZipEntry zipEntry;
        while ((zipEntry = zipInputStream.getNextEntry()) != null) {
            String fileName=zipEntry.getName();
            Map<String, String> map = new HashMap<>();
            //文件读取处理
            byte[] buffer = new byte[1024];
            int len;
            ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
            while ((len = zipInputStream.read(buffer)) != -1) {
                byteStream.write(buffer, 0, len);
            }
            // 关闭流
            byteStream.close();
            String base64EncodedString = byteArrayToBase64(byteStream.toByteArray());
            map.put("fileName",fileName);
            map.put("fileInfo",base64EncodedString);
            list.add(map);
        }
        return list;
    }

RAR

由于RAR5算法未公开,此方法仅支持RAR4

引入maven库

        <dependency>
            <groupId>com.github.junrar</groupId>
            <artifactId>junrar</artifactId>
            <version>7.5.0</version>
        </dependency>

    public List<Map<String, String>> readRarToInputStream(InputStream inputStream) throws IOException {
        List<Map<String, String>> list = new ArrayList<>();
        try (Archive archive = new Archive(inputStream)) {
            FileHeader fileHeader;
            while ((fileHeader = archive.nextFileHeader()) != null) {
                String fileName = fileHeader.getFileName();
                Map<String, String> map = new HashMap<>();
                // 文件读取处理
                ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
                try (InputStream fileStream = archive.getInputStream(fileHeader)) {
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = fileStream.read(buffer)) != -1) {
                        byteStream.write(buffer, 0, len);
                    }
                }
                // 转换为 Base64 编码的字符串
                String base64EncodedString = byteArrayToBase64((byteStream.toByteArray()));
                map.put("fileName", fileName);
                map.put("fileInfo", base64EncodedString);
                list.add(map);
            }
        } catch (UnsupportedRarV5Exception e) {
            LOG.error(e.getMessage());
            LOG.error("不支持rar5格式");
        } catch (RarException e) {
            LOG.error(e.getMessage());
        }
        return list;
    }

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容