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

时间:2019-07-11 08:39:16

标签: java zip ftp-client

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

我要做的是,无需从FTP下载zip归档文件,而是读取它拥有的第一个.txt文件的名称。保证其中将至少有1个.txt文件。

我读了一篇非常有趣的文章here,但它在.NET中,他们使用的远程URL与我的情况不同。


zip格式定义了某种指向其所有内部条目的目录。包含名称,起始偏移量,大小和其他内容之类的属性。而且该目录非常小,仅在归档文件的最后放置了几个字节。

enter image description here

我如何使用FTPCient解决它?

1 个答案:

答案 0 :(得分:0)

据我所知,没有其他答案。


输入示例(“ 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();               
    }                                                                                                                                        

}