How to read file from ZIP using InputStream?

inputstream, java, zip

Solution

Well, I've done this:

 zipStream = new ZipInputStream(channelSftp.get("Port_Increment_201405261400_2251.zip"));
 zipStream.getNextEntry();

 sc = new Scanner(zipStream);
 while (sc.hasNextLine()) {
     System.out.println(sc.nextLine());
 }

It helps me to read ZIP's content without writing to another file.

Problem

I must get file content from ZIP archive (only one file, I know its name) using SFTP. The only thing I'm having is ZIP's `InputStream`. Most examples show how get content using this statement: ``` ZipFile zipFile = new ZipFile("location"); ``` But as I said, I don't have ZIP file on my local machine and I don't want to download it. Is an `InputStream` enough to read? UPD: This is how I do: ``` import java.util.zip.ZipInputStream; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; public class SFTP { public static void main(String[] args) { String SFTPHOST = "host"; int SFTPPORT = 3232; String SFTPUSER = "user"; String SFTPPASS = "mypass"; String SFTPWORKINGDIR = "/dir/work"; Session session = null; Channel channel = null; ChannelSftp channelSftp = null; try { JSch jsch = new JSch(); session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT); session.setPassword(SFTPPASS); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); channel = session.openChannel("sftp"); channel.connect(); channelSftp = (ChannelSftp) channel; channelSftp.cd(SFTPWORKINGDIR); ZipInputStream stream = new ZipInputStream(channelSftp.get("file.zip")); ZipEntry entry = zipStream.getNextEntry(); System.out.println(entry.getName); //Yes, I got its name, now I need to get content } catch (Exception ex) { ex.printStackTrace(); } finally { session.disconnect(); channelSftp.disconnect(); channel.disconnect(); } } } ```

Original source