Android:如何通过 FTPClient 获取 FTP 文件的文件大小?

标签 android ftp download filesize

如何读取存储在我的 ftp 服务器上的文件的文件大小? 我不喜欢实现另一个库。

我正在使用 commons-io-2.4 和 commons-net-3.1

来自 talhakosen 的答案和代码(谢谢!)

private long getFileSize(FTPClient ftp, String filePath) throws Exception {
    long fileSize = 0;
    FTPFile[] files = ftp.listFiles(filePath);
    if (files.length == 1 && files[0].isFile()) {
        fileSize = files[0].getSize();
    }
    Log.i(TAG, "File size = " + fileSize);
    return fileSize;
}

最佳答案

您好,您可以使用下面的代码,

private void ftpDownload() {
    FTPClient ftp = null;
    try {
        ftp = new FTPClient();
        ftp.connect(mServer);

        try {
            int reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                throw new Exception("Connect failed: " + ftp.getReplyString());
            }
            if (!ftp.login(mUser, mPassword)) {
                throw new Exception("Login failed: " + ftp.getReplyString());
            }
            try {
                ftp.enterLocalPassiveMode();
                if (!ftp.setFileType(FTP.BINARY_FILE_TYPE)) {
                    Log.e(TAG, "Setting binary file type failed.");
                }
                transferFile(ftp);
            } catch(Exception e) {
                handleThrowable(e);
            } finally {
                if (!ftp.logout()) {
                    Log.e(TAG, "Logout failed.");
                }
            }
        } catch(Exception e) {
            handleThrowable(e);
        } finally {
            ftp.disconnect();
        }
    } catch(Exception e) {
        handleThrowable(e);
    }
}

private void transferFile(FTPClient ftp) throws Exception {
    long fileSize = getFileSize(ftp, mFilePath);
    InputStream is = retrieveFileStream(ftp, mFilePath);
    downloadFile(is, buffer, fileSize);
    is.close();

    if (!ftp.completePendingCommand()) {
        throw new Exception("Pending command failed: " + ftp.getReplyString());
    }
}

private InputStream retrieveFileStream(FTPClient ftp, String filePath)
throws Exception {
    InputStream is = ftp.retrieveFileStream(filePath);
    int reply = ftp.getReplyCode();
    if (is == null
            || (!FTPReply.isPositivePreliminary(reply)
                    && !FTPReply.isPositiveCompletion(reply))) {
        throw new Exception(ftp.getReplyString());
    }
    return is;
}

private byte[] downloadFile(InputStream is, long fileSize)
throws Exception {
    byte[] buffer = new byte[fileSize];
    if (is.read(buffer, 0, buffer.length)) == -1) {
        return null;
    }
    return buffer; // <-- Here is your file's contents !!!
}

private long getFileSize(FTPClient ftp, String filePath) throws Exception {
    long fileSize = 0;
    FTPFile[] files = ftp.listFiles(filePath);
    if (files.length == 1 && files[0].isFile()) {
        fileSize = files[0].getSize();
    }
    Log.i(TAG, "File size = " + fileSize);
    return fileSize;
}

关于Android:如何通过 FTPClient 获取 FTP 文件的文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13414817/

相关文章:

icons - 我可以为下载的 url 文件使用自定义 Logo 吗?

android - 做一个内接于圆的等边三角形,知道一个顶点或一条边

Android:使用 "progress"GUI 在后台线程中从 Web 加载数据?

android - 减小图像大小而不损失其在android中的质量

java - FTP进度条上传文件

c# - .NET FTP 上传文件并保留原始日期时间

android - 使用 AppCompat 的 Material 设计反向微调器/编辑文本主题

c++ - 无法使用 C++ 将文件上传到 ftp 服务器

python - Flask/Werkzeug 如何将 HTTP 内容长度 header 附加到文件下载

javascript - p2p文件下载中node.js写入文件流无序