代码加入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 包。
相关推荐
是乐谷7 分钟前
阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)
java·人工智能·阿里云·面试·职场和发展·机器人·云计算
Java水解25 分钟前
Java中的四种引用类型详解:强引用、软引用、弱引用和虚引用
java·后端
天才测试猿27 分钟前
常见的Jmeter压测问题
自动化测试·软件测试·python·测试工具·jmeter·职场和发展·压力测试
mortimer28 分钟前
一次与“顽固”外部程序的艰难交锋:subprocess 调用exe踩坑实录
windows·python·ai编程
lifallen33 分钟前
JCTools 无锁并发队列基础:ConcurrentCircularArrayQueue
java·开发语言·数据结构·算法
一叶飘零_sweeeet41 分钟前
IDEA 插件 Trae AI 全攻略
java·人工智能·intellij-idea
欧哈东哥1 小时前
【C++】标准库中用于组合多个值的数据结构pair、tuple、array...
java·数据结构·c++
python_1361 小时前
web请求和响应
java·spring·github
来自天蝎座的孙孙2 小时前
洛谷P1595讲解(加强版)+错排讲解
python·算法