为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蓝山帝景 2023-03-17 16:02:26
我正在使用 FTPClient 从我的 FTP 服务器下载文件,它充满了包含一个到多个.txt文件的 zip 文件夹。它们的大小可能很大,例如... 10GB。我想要做的是在不从 FTP 下载 zip 存档的情况下读取它拥有的第一个文件的名称.txt。保证.txt里面至少有 1 个文件。我在这里读了一篇非常有趣的文章,但它在里面.NET并且他们使用的是与我的情况不同的远程 URL。zip 格式定义了某种指向其所有内部条目的目录。包含名称、起始偏移量、大小和其他内容等属性。而且这个目录非常小,只有几个字节放在存档的末尾。我如何使用 FTPCient 解决它?
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超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();               

    }                                                                                                                                        


}   


查看完整回答
反对 回复 2023-03-17
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信