Java读取SFTP/FTP工具类

引言

在Java开发中,我们经常需要与远程服务器进行文件传输。SFTP(SSH File Transfer Protocol)和FTP(File Transfer Protocol)是两种常用的文件传输协议。本文将介绍如何使用Java读取SFTP和FTP的工具类,并提供相应的代码示例。

SFTP工具类

SFTP是通过SSH协议进行文件传输的一种安全的协议。在Java中,我们可以使用JSch库来实现SFTP操作。下面是一个简单的SFTP工具类的代码示例:

import com.jcraft.jsch.*;

public class SFTPUtils {

    private String host;
    private int port;
    private String username;
    private String password;
    private ChannelSftp channelSftp;
    private Session session;

    public SFTPUtils(String host, int port, String username, String password) {
        this.host = host;
        this.port = port;
        this.username = username;
        this.password = password;
    }

    public void connect() throws JSchException {
        JSch jsch = new JSch();
        session = jsch.getSession(username, host, port);
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();
        Channel channel = session.openChannel("sftp");
        channel.connect();
        channelSftp = (ChannelSftp) channel;
    }

    public void download(String remoteFilePath, String localFilePath) throws SftpException {
        channelSftp.get(remoteFilePath, localFilePath);
    }

    public void disconnect() {
        channelSftp.disconnect();
        session.disconnect();
    }

}

上述代码中,我们通过JSch库创建了一个SFTP连接,通过connect方法连接到SFTP服务器,通过download方法下载远程文件,并通过disconnect方法断开连接。

FTP工具类

FTP是最常见的一种文件传输协议,在Java中,我们可以使用Apache Commons Net库来实现FTP操作。下面是一个简单的FTP工具类的代码示例:

import org.apache.commons.net.ftp.*;

import java.io.*;

public class FTPUtils {

    private String host;
    private int port;
    private String username;
    private String password;
    private FTPClient ftpClient;

    public FTPUtils(String host, int port, String username, String password) {
        this.host = host;
        this.port = port;
        this.username = username;
        this.password = password;
    }

    public void connect() throws IOException {
        ftpClient = new FTPClient();
        ftpClient.connect(host, port);
        ftpClient.login(username, password);
        ftpClient.enterLocalPassiveMode();
    }

    public void download(String remoteFilePath, String localFilePath) throws IOException {
        FileOutputStream outputStream = new FileOutputStream(new File(localFilePath));
        ftpClient.retrieveFile(remoteFilePath, outputStream);
        outputStream.close();
    }

    public void disconnect() throws IOException {
        ftpClient.logout();
        ftpClient.disconnect();
    }

}

上述代码中,我们通过Apache Commons Net库创建了一个FTP连接,通过connect方法连接到FTP服务器,通过download方法下载远程文件,并通过disconnect方法断开连接。

使用示例

下面是使用以上工具类的示例代码:

public class Main {

    public static void main(String[] args) throws Exception {
        // 使用SFTP工具类下载远程文件
        SFTPUtils sftpUtils = new SFTPUtils("hostname", 22, "username", "password");
        sftpUtils.connect();
        sftpUtils.download("/path/to/remote/file", "/path/to/local/file");
        sftpUtils.disconnect();

        // 使用FTP工具类下载远程文件
        FTPUtils ftpUtils = new FTPUtils("hostname", 21, "username", "password");
        ftpUtils.connect();
        ftpUtils.download("/path/to/remote/file", "/path/to/local/file");
        ftpUtils.disconnect();
    }

}

在上述代码中,我们首先创建了一个SFTPUtils对象,并通过connect方法连接到SFTP服务器,然后通过download方法下载远程文件,最后通过disconnect方法断开连接。同样的,我们也创建了一个FTPUtils对象,并进行相同的操作。

结论

本文介绍了如何使用Java读取SFTP和FTP的工具类,并提供了相应的代码示例。通过这些工具类,我们可以方便地实现与远程服务器的文件传输操作。