杰瑞科技汇

Java FTP如何获取文件大小?

Java FTP 获取文件大小

在 Java 中,你可以使用 Apache Commons Net 库来通过 FTP 获取文件大小,以下是几种实现方法:

Java FTP如何获取文件大小?-图1
(图片来源网络,侵删)

使用 Apache Commons Net (推荐)

确保你添加了 Apache Commons Net 依赖到你的项目中:

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.9.0</version>
</dependency>

代码示例

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.io.IOException;
public class FtpFileSizeExample {
    public static void main(String[] args) {
        String server = "ftp.example.com";
        int port = 21;
        String user = "username";
        String pass = "password";
        String remoteFilePath = "/path/to/remote/file.txt";
        FTPClient ftpClient = new FTPClient();
        try {
            // 连接FTP服务器
            ftpClient.connect(server, port);
            ftpClient.login(user, pass);
            // 设置文件传输模式为被动模式
            ftpClient.enterLocalPassiveMode();
            // 获取文件大小
            FTPFile[] files = ftpClient.listFiles(remoteFilePath);
            if (files.length > 0) {
                long fileSize = files[0].getSize();
                System.out.println("文件大小: " + fileSize + " 字节");
            } else {
                System.out.println("文件不存在");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

使用 SIZE 命令

FTP 协议支持 SIZE 命令来获取文件大小,但需要服务器支持:

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
public class FtpFileSizeWithSizeCommand {
    public static void main(String[] args) {
        String server = "ftp.example.com";
        int port = 21;
        String user = "username";
        String pass = "password";
        String remoteFilePath = "/path/to/remote/file.txt";
        FTPClient ftpClient = new FTPClient();
        try {
            ftpClient.connect(server, port);
            ftpClient.login(user, pass);
            ftpClient.enterLocalPassiveMode();
            // 检查服务器是否支持SIZE命令
            if (ftpClient.hasFeature("SIZE")) {
                long fileSize = ftpClient.mlistFile(remoteFilePath).getSize();
                System.out.println("文件大小: " + fileSize + " 字节");
            } else {
                System.out.println("服务器不支持SIZE命令");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

使用 MLST 命令 (现代FTP服务器支持)

MLST 命令可以获取文件的详细信息,包括大小:

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
public class FtpFileSizeWithMlst {
    public static void main(String[] args) {
        String server = "ftp.example.com";
        int port = 21;
        String user = "username";
        String pass = "password";
        String remoteFilePath = "/path/to/remote/file.txt";
        FTPClient ftpClient = new FTPClient();
        try {
            ftpClient.connect(server, port);
            ftpClient.login(user, pass);
            ftpClient.enterLocalPassiveMode();
            // 检查服务器是否支持MLST命令
            if (ftpClient.hasFeature("MLST")) {
                FTPFile file = ftpClient.mlistFile(remoteFilePath);
                if (file != null) {
                    long fileSize = file.getSize();
                    System.out.println("文件大小: " + fileSize + " 字节");
                } else {
                    System.out.println("文件不存在");
                }
            } else {
                System.out.println("服务器不支持MLST命令");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

注意事项

  1. 确保FTP服务器配置允许你访问文件信息
  2. 被动模式(enterLocalPassiveMode())通常能更好地处理防火墙问题
  3. 处理异常情况,如文件不存在、连接超时等
  4. 对于大文件,考虑使用mlistFile()而不是listFiles(),因为它更高效

方法中,方法一使用listFiles()是最通用的,但效率较低;方法二和方法三使用专门的FTP命令,效率更高,但需要服务器支持。

Java FTP如何获取文件大小?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇