猿问

从远程 FTP 服务器获取 ZIP 第一个条目名称,而无需使用 Java 8+ 下载 zip

我正在使用 FTPClient 从我的 FTP 服务器下载文件,它充满了包含一个到多个.txt文件的 zip 文件夹。它们的大小可能很大,例如... 10GB。

我想要做的是在不从 FTP 下载 zip 存档的情况下读取它拥有的第一个文件的名称.txt。保证.txt里面至少有 1 个文件。

我在这里读了一篇非常有趣的文章,但它在里面.NET并且他们使用的是与我的情况不同的远程 URL。


zip 格式定义了某种指向其所有内部条目的目录。包含名称、起始偏移量、大小和其他内容等属性。而且这个目录非常小,只有几个字节放在存档的末尾。

我如何使用 FTPCient 解决它?



蓝山帝景
浏览 114回答 1
1回答

catspeake

我做了以下,据我所知没有其他答案。输入示例(“ftp-folder/input.txt”):public String getZipFirstEntryName(final String remotePath) {                                                                                    this.log.info("ENTERING getZipFirstEntry, remotePath={} ", remotePath);                                                                      /* Setup FTP connection */                                                                                                                   final FTPClient ftpClient = this.setupFtpConnection();                                                                                       try {                                                                                                                                            ftpClient.changeWorkingDirectory(remotePath.split("/")[0]); /* ftp-folder */                                                                           } catch (final IOException e) {                                                                                                                  e.printStackTrace();                                                                                                                     }                                                                                                                                            try (final ZipArchiveInputStream zip = new ZipArchiveInputStream(ftpClient.retrieveFileStream(remotePath.split("/")[1]))) { /* input.txt */                     this.log.info("EXITING getZipFirstEntry, remotePath={} ", remotePath);                                                                       return zip.getNextEntry().getName();                                                                                                     } catch (final IOException e) {                                                                                                                  e.printStackTrace();                   }                                                                                                                                        }   
随时随地看视频慕课网APP

相关分类

Java
我要回答