如何解压缩从FTP服务器读取的7z文件

时间:2019-06-25 09:00:01

标签: 7zip ftp-client

现在我在FTP服务器上有一个7z文件。

我使用FTP Client来检索此文件,然后得到一个InputStream(SockerInputStream)

我使用SevenZFile解压缩它,但是失败了,抛出异常:

java.io.IOException: NextHeader CRC mismatch

我尝试使用SevenZFile sZFile = new SevenZFile(new File(""));,它可以正常工作

有人知道如何实现吗?

非常感谢。

解压缩

import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;

public static void decompressFileContent(InputStream is) throws Exception {
        try {   
            byte[] bytes = IOUtils.toByteArray(is);
            SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
            SevenZFile sZFile = new SevenZFile(channel);
            SevenZArchiveEntry entry;
            while ((entry = sZFile.getNextEntry()) != null){
                byte[] content = new byte[(int) entry.getSize()];
                sZFile.read(content, 0, content.length);
                System.out.println(new String(content));
            }
            sZFile.close();
            channel.close();
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

FTP

public static InputStream getFileByFtpClient(String fileName, String filePath) throws Exception{

            FTPClient ftp = new FTPClient();
            ftp.connect("XXX", XXX);
            if(!ftp.login("XXX", "XXX"))
            {
                ftp.logout();
            }

            ftp.enterLocalPassiveMode();
            System.out.println(" -- Remote system is " + ftp.getSystemType());
            ftp.changeWorkingDirectory(filePath);
            InputStream inputStream = ftp.retrieveFileStream(fileName);
            ftp.disconnect();


            return inputStream;
    }

0 个答案:

没有答案