现在我在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;
}