gpt4 book ai didi

java - 在 InputStream 之前获取 FileSize

转载 作者:行者123 更新时间:2023-11-30 11:57:57 25 4
gpt4 key购买 nike

我想为 FTP 下载创建一个进度条。我下载文件的服务器隐藏了所有目录和文件。我想显示下载进度。有什么办法可以获得文件大小吗?这是我当前的代码:

   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;
}

最佳答案

无法在所有 FTP 服务中可靠地执行此操作。

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

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

编辑

@Kevin Brock 提到了 FTP SIZE 命令的可能性。

  • 此命令于 2007 年在 RFC 3659 中首次定义。许多已部署的 FTP 服务器软件比这要早得多。
  • SIZE 是可选命令;即,即使符合 RFC 3659 标准的服务器也不需要支持它。
  • 即使服务器支持 SIZE,当前的 Apache FTPClient API 也不包含获取文件大小的方法(除了通过 listFiles)。当然,这在未来可能会改变。
  • ftp4j FTPClient类显然确实实现了 SIZE 并通过其 fileSize(...) 方法使其可用。

关于java - 在 InputStream 之前获取 FileSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com