从远程 FTP 服务器获取 ZIP 第一个条目名称,而无需使用 Java 下载 zip 8+
Get ZIP first entry name from remote FTP Server without downloading the zip using Java 8+
我正在使用 FTP客户端从我的 FTP 服务器下载文件,它充满了 zip 文件夹,其中包含一个到多个 .txt
文件。它们的大小可能很大,例如... 10GB .
我想要做的是 不从 FTP 下载 zip 存档,而是读取它具有的第一个 .txt
文件的名称。保证里面至少有 1 个 .txt
文件。
我读了一篇非常有趣的文章 here 但它在 .NET
中并且他们正在使用远程 URL 这与我的情况不同。
zip 格式定义了某种指向其所有内部条目的目录。包含名称、起始偏移量、大小和其他内容等属性。而且这个目录非常小,只有几个字节放在存档的最后。
我如何与 FTPCient 一起玩?
我做了以下,据我所知没有其他答案。
示例输入 ("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();
}
}
我正在使用 FTP客户端从我的 FTP 服务器下载文件,它充满了 zip 文件夹,其中包含一个到多个 .txt
文件。它们的大小可能很大,例如... 10GB .
我想要做的是 不从 FTP 下载 zip 存档,而是读取它具有的第一个 .txt
文件的名称。保证里面至少有 1 个 .txt
文件。
我读了一篇非常有趣的文章 here 但它在 .NET
中并且他们正在使用远程 URL 这与我的情况不同。
zip 格式定义了某种指向其所有内部条目的目录。包含名称、起始偏移量、大小和其他内容等属性。而且这个目录非常小,只有几个字节放在存档的最后。
我如何与 FTPCient 一起玩?
我做了以下,据我所知没有其他答案。
示例输入 ("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();
}
}