首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在InputStream之前获取FileSize

在InputStream之前获取FileSize
EN

Stack Overflow用户
提问于 2010-08-12 08:46:39
回答 2查看 6.7K关注 0票数 2

我想为FTP下载创建一个progressBar。我下载文件的服务器隐藏了它的所有目录和文件。我想要显示下载的进度。有没有办法让我知道文件的大小?下面是我当前的代码:

代码语言:javascript
复制
   FTPclient = new FTPClient();
               FTPclient.setListHiddenFiles(true);
               FTPclient.connect(hostPart);
               FTPclient.login(userName, passWord);
               FTPclient.setFileType(FTP.BINARY_FILE_TYPE);

                InputStream instream = FTPclient.retrieveFileStream(pathExcludingHostIncludingFirstSlash);


            int l;
            byte[] tmp = new byte[2048];
            int updateCounter = 0;
            int bytesDownloaded = 0;
            while ((l = instream.read(tmp)) != -1) {
                fos.write(tmp, 0, l);
                bytesDownloaded+=2048;
                updateCounter++;
                if(updateCounter==3){
                    kilobytesDownloaded=(bytesDownloaded / 1024);
                    publishProgress((String[])null);
                    updateCounter=0;
                }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-12 09:32:15

没有办法在所有FTP服务中可靠地做到这一点。

FTP协议不提供获取文件大小的方法,因此您需要请求一个目录列表并取消选择您返回的(特定于服务器的)文本。此外,不能保证将启用目录列表,也不保证您将拥有列出该目录的权限。

话虽如此,一些FTP库可以配置为尝试获取文件大小。例如,使用Apache库,您可以(尝试)使用listFiles(String)方法并查看生成的FTPFile对象。

编辑

@Kevin Brock提到FTP SIZE命令是一种可能性。

RFC3659于2007年首次定义了

  • This is命令。很多已部署的FTP服务器软件都比这个旧得多。Apache
  • SIZE是一个可选的命令;也就是说,即使是符合RFC3659标准的服务器也不需要支持它。
  • 即使服务器支持size,当前的Apache也不包括获取文件大小的方法(除了通过listFiles)。当然,这在将来可能会改变。
  • ftp4j FTPClient类显然实现了SIZE,并通过其fileSize(...)方法使其可用。
票数 1
EN

Stack Overflow用户

发布于 2013-05-17 00:04:36

我也没有找到一个简单的命令来做这件事。我的解决方案是调用跳过命令,该命令应返回跳过的字节数。对其求和,直到跳过返回0。由于文件结束以外的其他原因,skip可能会返回0,但在字段中它似乎工作得很好。

下面是一些示例代码:

代码语言:javascript
复制
InputStream checkStream = m_ftpClient.retrieveFileStream(name);

long fileLength = 0;
long transferredLength = 0;
do
{
    transferredLength = checkStream.skip(MAX_BYTES);
    fileLength += transferredLength;
}while(transferredLength > 0);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3463934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档