代码加入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 包。
相关推荐
21439653 分钟前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
2301_813599556 分钟前
如何在网页中完整显示数组内所有对象的全部属性
jvm·数据库·python
阿巴斯甜7 分钟前
Android:MagicIndicator的使用
java
解救女汉子9 分钟前
如何分析Data Guard的网络瓶颈_Bandwidth与Redo传输速率的计算公式
jvm·数据库·python
Nyarlathotep011311 分钟前
并发集合类(1):CopyOnWriteArrayList
java·后端
m0_7436239214 分钟前
Golang怎么做数据库事务_Golang数据库事务教程【技巧】
jvm·数据库·python
千寻girling14 分钟前
被内推的面试 , 第一次
java·前端·python·面试·职场和发展·typescript·node.js
qq_3300379915 分钟前
模型持久化不会提升准确率——揭秘机器学习中常见的评估误区
jvm·数据库·python
qq_4240985616 分钟前
CSS如何实现背景平铺与拉伸控制_使用background-repeat属性
jvm·数据库·python
AC赳赳老秦20 分钟前
程序员面试:OpenClaw生成面试题、模拟面试,高效备战面试
人工智能·python·机器学习·面试·职场和发展·deepseek·openclaw