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