Java上传多个文件到SFTP服务器

引言

在开发过程中,我们经常需要将文件上传到远程服务器。SFTP (Secure File Transfer Protocol) 是一种安全的文件传输协议,可以通过SSH (Secure Shell) 连接进行文件传输。本文将介绍如何使用Java上传多个文件到SFTP服务器,并提供代码示例。

准备工作

在开始编写代码之前,我们需要准备以下工作:

  • 一台可访问的SFTP服务器
  • Java开发环境

SFTP服务器连接配置

首先,我们需要设置SFTP服务器的连接配置。通常,我们需要提供以下信息:

  • 主机名 (hostname)
  • 端口号 (port)
  • 用户名 (username)
  • 密码 (password)

为了方便管理,我们可以将这些配置信息存储在一个配置文件中,然后在代码中读取。下面是一个示例的配置文件 config.properties

sftp.hostname=your.sftp.hostname
sftp.port=22
sftp.username=your.sftp.username
sftp.password=your.sftp.password

我们可以使用 java.util.Properties 类读取配置文件中的配置信息。以下是一个读取配置文件的示例代码:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class SFTPConfig {

    public static void main(String[] args) {
        Properties properties = new Properties();
        try {
            FileInputStream fileInputStream = new FileInputStream("config.properties");
            properties.load(fileInputStream);
            fileInputStream.close();

            String hostname = properties.getProperty("sftp.hostname");
            int port = Integer.parseInt(properties.getProperty("sftp.port"));
            String username = properties.getProperty("sftp.username");
            String password = properties.getProperty("sftp.password");

            // 使用配置信息进行SFTP连接
            // ...
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用JSch进行SFTP上传

JSch 是一个纯Java实现的SSH2协议的实现库,我们可以使用它来进行SFTP上传。下面是一个使用JSch上传单个文件到SFTP服务器的示例代码:

import com.jcraft.jsch.*;

public class SFTPUpload {

    private static final String LOCAL_FILE = "path/to/local/file";
    private static final String REMOTE_DIR = "/path/to/remote/directory/";

    public static void main(String[] args) {
        JSch jSch = new JSch();
        try {
            // 读取配置文件
            Properties properties = new Properties();
            FileInputStream fileInputStream = new FileInputStream("config.properties");
            properties.load(fileInputStream);
            fileInputStream.close();

            String hostname = properties.getProperty("sftp.hostname");
            int port = Integer.parseInt(properties.getProperty("sftp.port"));
            String username = properties.getProperty("sftp.username");
            String password = properties.getProperty("sftp.password");

            // 创建SFTP会话
            Session session = jSch.getSession(username, hostname, port);
            session.setPassword(password);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();

            // 打开SFTP通道
            ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
            channelSftp.connect();

            // 上传文件
            channelSftp.put(LOCAL_FILE, REMOTE_DIR);
            channelSftp.disconnect();

            // 关闭会话
            session.disconnect();
        } catch (JSchException | IOException | SftpException e) {
            e.printStackTrace();
        }
    }
}

以上代码将指定的本地文件 LOCAL_FILE 上传到远程目录 REMOTE_DIR

上传多个文件

如果我们需要上传多个文件,可以使用一个循环来遍历文件列表,然后逐个进行上传。下面是一个上传多个文件的示例代码:

import com.jcraft.jsch.*;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Vector;

public class SFTPUploadMultipleFiles {

    private static final String LOCAL_DIR = "path/to/local/directory/";
    private static final String REMOTE_DIR = "/path/to/remote/directory/";

    public static void main(String[] args) {
        JSch jSch = new JSch();
        try {
            // 读取配置文件
            Properties properties = new Properties();
            FileInputStream fileInputStream = new FileInputStream("config.properties");
            properties.load(fileInputStream);
            fileInputStream.close();

            String hostname = properties.getProperty("sftp.hostname");
            int port = Integer.parseInt(properties.getProperty("sftp.port"));
            String username = properties.getProperty("sftp.username");
            String password = properties.getProperty("sftp.password");

            // 创建SFTP会话
            Session session = jSch.getSession(username, hostname, port);
            session.setPassword(password);
            session.setConfig