java - 无法从 Tar、0kb 大小、Java 中提取单个文件

标签 java tar apache-commons-compress

我已经创建了一个应用程序,它将从 tar 存档中提取单个文件。该应用程序正确读取 *.tar,但是当我尝试提取文件时,该应用程序只是创建具有正确文件名的新文件...文件是空的(0kb)。所以...我可能只是创建新文件而不是提取...

此时我完全是初学者......

for(TarArchiveEntry tae : tarEntries){
    System.out.println(tarEntries.size());
    try {
        fOutput = new FileOutputStream(new File(tae.getFile(), tae.getName()));
        byte[] buf = new byte[(int) tae.getSize()];
        int len;

        while ((len = tarFile.read(buf)) > 0) {
            fOutput.write(buf, 0, len);
        }

        fOutput.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

最佳答案

假设 tarFileTarArchiveInputStream,您只能在调用 tarFile.getNextTarEntry() 后立即读取条目的内容。

流是按顺序处理的,因此当您调用 getNextTarEntry 时,您会跳过当前条目的内容,直接跳到下一个条目。看起来好像您已经阅读了整个存档以填充 tarEntries 在这种情况下,您已经阅读了最后一个条目并且流已耗尽。

关于java - 无法从 Tar、0kb 大小、Java 中提取单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439337/

相关文章:

java - 并行 BZip2 压缩

java - 如何使用 Java 下载 WordPress

java - 无法在Intellij Ultimate Edition 2017中创建新的Gradle项目

java - 如何修改传递给 Java 方法的枚举

android dalvik vm-heap 在 XZ 压缩时内存分配不足

linux - 在 tar 压缩文件中有没有办法添加评论或描述

linux - 如何让 Crontab 和 Tar 一起正确工作

java - 未使用 Spring-Cloud-Stream 创建 RabbitMQ Exchange

Java Socket编程客户端服务器通信问题

linux - 使用 bash 脚本下载和提取解压文件的自动化脚本