代码加入SFTP JAVA ---(小白篇3)

在 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 依赖:

xml 复制代码
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

Java 示例代码

以下代码展示了如何连接 SFTP 服务器、上传文件、下载文件和列出目录内容:

java 复制代码
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. 配置 StrictHostKeyChecking
            java.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();
        }
    }
}

代码说明

  1. 连接服务器 :
    • 使用 JSch 库建立 SSH 连接。
    • 提供用户名、密码和主机 IP 地址。
  2. 上传文件 :
    • 使用 sftpChannel.put() 方法将本地文件上传到服务器。
  3. 下载文件 :
    • 使用 sftpChannel.get() 方法将远程文件下载到本地。
  4. 列出目录内容 :
    • 使用 sftpChannel.ls() 方法获取远程目录中的文件列表。
  5. 安全选项 :
    • 配置 StrictHostKeyCheckingno,以忽略主机密钥检查(生产环境中建议添加已知主机密钥验证)。

测试

  • 将代码中的 SFTP_HOSTSFTP_USERSFTP_PASSWORD 替换为实际的 SFTP 服务器信息。
  • 修改 localFileremoteDir 为实际的文件路径和远程目录。

运行代码后,您应该能够上传、下载文件并列出远程目录的内容。

常见问题

  1. 权限不足 :
    • 确保服务器上的目录权限正确,用户具有读写权限。
  2. 连接失败 :
    • 检查服务器的防火墙设置,确保开放了端口 22。
  3. 依赖问题 :
    • 确保 Maven 依赖已正确引入,或手动添加 JSch 的 JAR 包。
相关推荐
Cosmoshhhyyy5 分钟前
LeetCode:3083. 字符串及其反转中是否存在同一子字符串(哈希 Java)
java·leetcode·哈希算法
AI人H哥会Java19 分钟前
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
java·开发语言·spring boot·后端·架构
sin220122 分钟前
springboot数据校验报错
spring boot·后端·python
开心工作室_kaic29 分钟前
springboot493基于java的美食信息推荐系统的设计与实现(论文+源码)_kaic
java·开发语言·美食
缺少动力的火车31 分钟前
Java前端基础—HTML
java·前端·html
loop lee38 分钟前
Redis - Token & JWT 概念解析及双token实现分布式session存储实战
java·redis
ThetaarSofVenice39 分钟前
能省一点是一点 - 享元模式(Flyweight Pattern)
java·设计模式·享元模式
eric-sjq40 分钟前
基于xiaothink对Wanyv-50M模型进行c-eval评估
人工智能·python·语言模型·自然语言处理·github
InSighT__41 分钟前
设计模式与游戏完美开发(2)
java·游戏·设计模式