刘虾 2024-08-26 21:19 采纳率: 75%
浏览 8
已结题

java怎么读取RAR5.0压缩包套RAR5.0压缩包的文件,不解压到目录,通过文件流获取

java怎么读取RAR5.0压缩包套RAR5.0压缩包的文件,不解压到临时文件夹,通过文件流获取第二层压缩包的文件

  • 写回答

3条回答 默认 最新

  • 吃不了席 2024-08-26 21:20
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要读取嵌套的RAR压缩包,你可以使用Java的第三方库junrar。首先,你需要将junrar添加到你的项目依赖中。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖:

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

    接下来,你可以使用以下代码来读取嵌套的RAR压缩包中的文件:

    import com.github.junrar.Archive;
    import com.github.junrar.exception.RarException;
    import com.github.junrar.impl.FileVolumeManager;
    import com.github.junrar.rarfile.FileHeader;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    public class RarReader {
        public static void main(String[] args) {
            File rarFile = new File("path/to/your/first/rarfile.rar");
            try (InputStream inputStream = new FileInputStream(rarFile)) {
                Archive archive = new Archive(new FileVolumeManager(inputStream));
                for (FileHeader fileHeader : archive.getFileHeaders()) {
                    if (fileHeader.isDirectory()) {
                        continue;
                    }
                    System.out.println("Extracting: " + fileHeader.getFileName());
                    try (InputStream fileStream = archive.getInputStream(fileHeader)) {
                        // 处理内部RAR文件
                        processInnerRar(fileStream);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            } catch (IOException | RarException e) {
                e.printStackTrace();
            }
        }
    
        private static void processInnerRar(InputStream innerRarStream) throws IOException, RarException {
            Archive innerArchive = new Archive(new FileVolumeManager(innerRarStream));
            for (FileHeader innerFileHeader : innerArchive.getFileHeaders()) {
                if (innerFileHeader.isDirectory()) {
                    continue;
                }
                System.out.println("Extracting inner RAR: " + innerFileHeader.getFileName());
                try (InputStream innerFileStream = innerArchive.getInputStream(innerFileHeader)) {
                    // 处理内部RAR文件的内容,例如保存到内存或其他地方
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    这段代码首先打开第一个RAR压缩包,然后遍历其中的每个文件。对于每个非目录文件,它会检查文件是否为RAR压缩包。如果是,它会调用processInnerRar方法来处理内部RAR文件。在这个方法中,你可以根据需要处理内部RAR文件的内容,例如将其保存到内存或其他地方。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月29日
  • 修改了问题 8月27日
  • 创建了问题 8月26日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见