Как распаковать файл 7z, который читается с FTP-сервера - PullRequest
0 голосов
/ 25 июня 2019

Теперь у меня есть файл 7z на FTP-сервере.

Я использую 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;
    }
...