【发布时间】:2014-07-15 04:11:11
【问题描述】:
我必须使用 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();
}
}
}
【问题讨论】:
-
如果我只需要读取它的txt文件内容,我真的需要编写一个新的zip文件吗?
-
没有理由不工作,您只需要获取所有 ZIPEntries 并从流中保存它们
标签: java zip inputstream