簡體   English   中英

從遠程 FTP 服務器獲取 ZIP 第一個條目名稱,而無需使用 Java 8+ 下載 zip

[英]Get ZIP first entry name from remote FTP Server without downloading the zip using Java 8+

我正在使用 FTPClient 從我的 FTP 服務器下載文件,它充滿了 zip 文件夾,其中包含一個到多個.txt文件。 它們的大小可能很大,例如 ... 10GB 。

我想要做的是不從 FTP 下載 zip 存檔,而是讀取它擁有的第一個.txt文件的名稱。 保證里面至少有 1 個.txt文件。

在這里閱讀了一篇非常有趣的文章但它是在.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();               
    }                                                                                                                                        

}   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM