自学内容网 自学内容网

代码加入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 依赖:

<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. 配置 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 包。

原文地址:https://blog.csdn.net/leader_song/article/details/144653350

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!