在 Java 中,您可以使用 JSch(Java Secure Channel)库 来连接和操作 SFTP 服务器。以下是一个完整的示例代码,展示如何使用 Java 接入 SFTP 服务器并上传文件。
1.服务器上加入SFTP------(小白篇 1)
 
2.加入SFTP 用户------(小白篇 2)
 
 3.代码加入SFTP JAVA —(小白篇3)
 
4.代码加入SFTP Python —(小白篇4
5.代码加入SFTP Go —(小白篇5)
Maven 引入依赖
在您的 pom.xml 文件中添加 JSch 依赖:
<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version>
</dependency>
Java 示例代码
以下代码展示了如何连接 SFTP 服务器、上传文件、下载文件和列出目录内容:
import com.jcraft.jsch.*;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Vector;public class SftpClient {private static final String SFTP_HOST = "your-server-ip"; // 服务器地址private static final int SFTP_PORT = 22;                  // 默认端口private static final String SFTP_USER = "newuser";        // 用户名private static final String SFTP_PASSWORD = "yourpassword"; // 密码public static void main(String[] args) {Session session = null;ChannelSftp sftpChannel = null;try {// 1. 创建 JSch 对象JSch jsch = new JSch();// 2. 建立会话session = jsch.getSession(SFTP_USER, SFTP_HOST, SFTP_PORT);session.setPassword(SFTP_PASSWORD);// 3. 配置 StrictHostKeyCheckingjava.util.Properties config = new java.util.Properties();config.put("StrictHostKeyChecking", "no");session.setConfig(config);// 4. 连接服务器session.connect();System.out.println("Session connected.");// 5. 打开 SFTP 通道Channel channel = session.openChannel("sftp");channel.connect();System.out.println("SFTP channel connected.");sftpChannel = (ChannelSftp) channel;// 上传文件String localFile = "C:/path/to/local/file.txt"; // 本地文件路径String remoteDir = "/uploads/";                // 远程目录uploadFile(sftpChannel, localFile, remoteDir);// 下载文件String remoteFile = "/uploads/file.txt";       // 远程文件路径String downloadDir = "C:/path/to/download/";   // 本地下载目录downloadFile(sftpChannel, remoteFile, downloadDir);// 列出远程目录文件listFiles(sftpChannel, remoteDir);} catch (Exception e) {e.printStackTrace();} finally {// 关闭连接if (sftpChannel != null) {sftpChannel.disconnect();}if (session != null) {session.disconnect();}}}// 上传文件private static void uploadFile(ChannelSftp sftpChannel, String localFile, String remoteDir) {try (FileInputStream fis = new FileInputStream(localFile)) {sftpChannel.put(fis, remoteDir + localFile.substring(localFile.lastIndexOf("/") + 1));System.out.println("File uploaded successfully.");} catch (Exception e) {e.printStackTrace();}}// 下载文件private static void downloadFile(ChannelSftp sftpChannel, String remoteFile, String localDir) {try (FileOutputStream fos = new FileOutputStream(localDir + remoteFile.substring(remoteFile.lastIndexOf("/") + 1))) {sftpChannel.get(remoteFile, fos);System.out.println("File downloaded successfully.");} catch (Exception e) {e.printStackTrace();}}// 列出目录文件private static void listFiles(ChannelSftp sftpChannel, String remoteDir) {try {Vector<ChannelSftp.LsEntry> fileList = sftpChannel.ls(remoteDir);System.out.println("Files in directory:");for (ChannelSftp.LsEntry entry : fileList) {System.out.println(" - " + entry.getFilename());}} catch (Exception e) {e.printStackTrace();}}
}
代码说明
- 连接服务器: - 使用 JSch库建立 SSH 连接。
- 提供用户名、密码和主机 IP 地址。
 
- 使用 
- 上传文件: - 使用 sftpChannel.put()方法将本地文件上传到服务器。
 
- 使用 
- 下载文件: - 使用 sftpChannel.get()方法将远程文件下载到本地。
 
- 使用 
- 列出目录内容: - 使用 sftpChannel.ls()方法获取远程目录中的文件列表。
 
- 使用 
- 安全选项: - 配置 StrictHostKeyChecking为no,以忽略主机密钥检查(生产环境中建议添加已知主机密钥验证)。
 
- 配置 
测试
- 将代码中的 SFTP_HOST、SFTP_USER和SFTP_PASSWORD替换为实际的 SFTP 服务器信息。
- 修改 localFile和remoteDir为实际的文件路径和远程目录。
运行代码后,您应该能够上传、下载文件并列出远程目录的内容。
常见问题
- 权限不足: - 确保服务器上的目录权限正确,用户具有读写权限。
 
- 连接失败: - 检查服务器的防火墙设置,确保开放了端口 22。
 
- 依赖问题: - 确保 Maven 依赖已正确引入,或手动添加 JSch 的 JAR 包。