当前位置: 首页 > 面试题库 >

如何使用InputStream从ZIP读取文件?

陆翔飞
2023-03-14
问题内容

我必须使用SFTP从ZIP存档(只有一个文件,我知道它的名称)中获取文件内容。我唯一拥有的是ZIP的InputStream。大多数示例说明如何使用以下语句获取内容:

ZipFile zipFile = new ZipFile("location");

但是正如我所说,我的本地计算机上没有ZIP文件,也不想下载它。是InputStream够看了?

UPD: 这是我的方法:

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();
        }


    }
}

问题答案:

好吧,我已经做到了:

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

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

它可以帮助我阅读ZIP的内容而无需写入另一个文件。



 类似资料:
  • 我必须使用SFTP从ZIP存档(只有一个文件,我知道它的名称)获取文件内容。我唯一拥有的是ZIP的InputStream。大多数示例显示了如何使用此语句获取内容: 但正如我所说,我的本地机器上没有ZIP文件,我不想下载它。输入流是否足以读取? UPD:我就是这样做的:

  • 问题内容: 我已经创建了可执行的jar文件(使用Eclipse),在jar中包含一组图像(.png)文件。所以我添加了一个源文件夹,其中所有图像都位于项目的文件夹中。代码必须访问这些文件才能使用创建BufferedImage 较早前,为了获得我使用的路径 在执行jar时,它抛出错误 URI不是分层的 所以现在我正在使用 但是如何使ImageIO从Inputstream读取?我试过如下 抛出错误 I

  • 问题内容: 我如何阅读像android app中的文本文件: 所以我可以返回一个字符串,如: 我想到的是(伪代码): 问题答案: 试试这个

  • 我想从嵌套的zip文件中读取(另一个zip中的zip文件) a.zip->b.zip->c.txt 以下是测试程序: 和输出:

  • 问题内容: 我从SUN网站(http://java.sun.com/developer/technicalArticles/Programming/compression/)找到了示例,但是它返回BufferedOutputStream。但是我想将ZipEntry文件作为InputStream,然后处理下一个文件。那可能吗?我的程序无法访问硬盘,因此它甚至无法临时保存文件。 问题答案: 好吧,只需

  • 问题内容: 在一个项目上,我通过一个类似于控制台的小窗口运行Java应用程序。由于这里有一个很棒的社区,我设法通过从流程输出数据来解决问题,但是由于没有输入流,我运行的命令行应用程序将不断出错。 基于该线程中最后一个有用的答复,我想我将以类似的方式实现该实现,但是在javadocs中以及整个google和互联网中寻找某个类,该类确实没有发现任何解释方法。 因此,我需要一些链接,示例,教程,示例代码