代码加入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 包。
相关推荐
每天一个秃顶小技巧27 分钟前
02.Golang 切片(slice)源码分析(一、定义与基础操作实现)
开发语言·后端·python·golang
purrrew1 小时前
【Java ee初阶】初始网络
java·网络
程序员Bears1 小时前
从零打造个人博客静态页面与TodoList应用:前端开发实战指南
java·javascript·css·html5
Helibo441 小时前
GESPC++六级复习
java·数据结构·算法
安特尼2 小时前
招行数字金融挑战赛数据赛道赛题一
人工智能·python·机器学习·金融·数据分析
serve the people2 小时前
解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
开发语言·python·conda
柒七爱吃麻辣烫2 小时前
在Linux中安装JDK并且搭建Java环境
java·linux·开发语言
极小狐2 小时前
极狐GitLab 容器镜像仓库功能介绍
java·前端·数据库·npm·gitlab
努力的搬砖人.3 小时前
如何让rabbitmq保存服务断开重连?保证高可用?
java·分布式·rabbitmq
_星辰大海乀3 小时前
数据库约束
java·数据结构·数据库·sql·链表