Java完成sftp上传

目录

背景

一、sftp是什么?

二、代码示例

 三、解释

总结


背景

业务需要从 SFTP 服务器上上传、下载、删除文件等功能,通过查阅资料及手敲代码,实现了操作 SFTP 的基本功能。


提示:以下是本篇文章正文内容,下面案例可供参考

一、sftp是什么?

SFTP 是一种数据流链接,提供文件访问、传输和管理功能的网络传输协议。它允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。

二、代码示例

代码如下:

import java.io.IOException;

public class SftpTool {
    public static void main(String[] args) {
        // 定义在 SFTP 服务器的文件名
        String[] downloadFiles = {"te1.txt", "te2.txt", "te3.txt"};
        // 获取指定的远程路径
        String remotePath = "/data/file/STA/PCRM/20240303/";
        // 获取指定的本地路径
        String localPath = "/app1/";

        // 调用下载文件方法
        for (String fileName : downloadFiles) {
            downloadFile(remotePath + fileName, localPath);
        }

        // 定义要上传到 SFTP 的本地文件名
        String[] uploadFiles = {"te4.txt", "te5.txt", "te6.txt"};
        // 获取指定的远程路径
        remotePath = "/data/file/STA/PCRM/20240303/";
        // 获取指定的本地路径
        localPath = "/app1/";

        // 调用上传文件的方法
        for (String filename : uploadFiles) {
            uploadFile(localPath + filename, remotePath);
        }
    }

    // 下载文件的方法
    public static void downloadFile(String remoteFilePath, String localFilePath) {
        try {
            // 设置 SFTP 服务器信息
            String ftpUser = "test";
            String ftpPass = "test";
            String ftpIp = "10.192.00.90";  //需要改成个人对应的服务器ip
            String ftpPort = "22";

            // 构建 SFTP 下载命令
            String downloadSftpCommand = "sshpass -p \"" + ftpPass + "\" sftp -oPort=" + ftpPort + " " +
                    ftpUser + "@" + ftpIp;
            String downloadCommands = "lcd " + localFilePath + "\n" + // 切换到本地目录
                    "get " + remoteFilePath + "\nexit"; // 使用 get 命令下载指定文件

            // 合并 SFTP 下载命令
            String downloadFullCommand = downloadSftpCommand + " <<< $" + "'" + downloadCommands + "'";
            System.out.println(downloadFullCommand); // 启动进程执行下载命令 ProcessBuilder downloadProcessBuilder=new
            ProcessBuilder("/bin/bash", "-c", downloadFullCommand);
            Process downloadProcess = downloadProcessBuilder.start();
            int downloadExitCode = downloadProcess.waitFor(); // 检查下载命令执行结果
            if (downloadExitCode == 0) {
                System.out.println("文件下载成功!" + remoteFilePath);
            } else {
                System.err.println("文件下载失败,命令执行错误码:" + downloadExitCode);
            }
        } catch (IOException |
                InterruptedException e) {
            e.printStackTrace();
        }
    }

    // 上传文件的方法
    public static void uploadFile(String localFilePath, String remoteFilePath) {
        try {
            // 设置 SFTP 服务器信息
            String ftpUser = "test";
            String ftpPass = "test";
            String ftpIp = "10.192.00.90";  //需要改成个人对应的服务器ip
            String ftpPort = "22";

            // 构建 SFTP 上传命令
            String uploadSftpCommand = "sshpass -p \"" + ftpPass + "\" sftp -oPort=" + ftpPort + " " +
                    ftpUser + "@" + ftpIp + ":" + remoteFilePath;
            String uploadCommands = "put " + localFilePath + "\nexit"; // 使用 put 命令上传文件

            // 合并 SFTP 上传命令
            String uploadFullCommand = uploadSftpCommand + " <<< $" + "'" +
                    uploadCommands + "'";
            // 启动进程执行上传命令
            ProcessBuilder uploadProcessBuilder = new ProcessBuilder("/bin/bash", "-c",
                    uploadFullCommand);
            Process uploadProcess = uploadProcessBuilder.start();
            int uploadExitCode = uploadProcess.waitFor();
            // 检查上传命令执行结果
            if (uploadExitCode == 0) {
                System.out.println("文件上传成功!" + localFilePath + " -> " + remoteFilePath);
            } else {
                System.err.println("文件上传失败,命令执行错误码:" + uploadExitCode);
            }
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 三、解释

个人理解:sftp是一个文件传输协议,在日常开发过程中,我们可以在linux服务器内创建一个sftp的专用用户,限制这个用户的目录访问,将这个用户改造成一个文件处理的专用用户,从而在不影响其他用户的使用的前提下,完成对应的工作。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了Java代码完成sftp上传的任务,可以修改对应代码的数据,完成不同服务器的文件的上传和下载。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用提供了一个简单的Java使用SFTP上传文件到服务器的例子,可以作为参考。引用中给出了配置文件和文件信息实体类的示例代码。引用介绍了JSch工具类和ChannelSftp常用API。 在Java中,可以使用JSch库来实现SFTP上传文件。首先,需要配置SFTP服务器的连接信息,包括服务器地址、端口、用户名和密码等。然后,可以创建一个TransferObject对象来保存要传输的文件的相关信息,如本地文件路径、文件名、远程文件路径和有效时间等。接下来,可以使用JSch库的功能来建立SFTP连接并进行文件的上传操作。具体的代码实现可以参考引用中的示例。 需要注意的是,使用SFTP上传文件时,需要引入JSch库,并导入相关的类和方法。可以在项目的依赖中添加JSch库的引用,然后在代码中使用相应的类和方法来完成文件的上传操作。具体的实现步骤可以参考JSch官方文档或者引用中提供的ChannelSftp常用API。 总结起来,sftp上传文件Java的实现可以通过JSch库来完成,首先需要配置服务器连接信息,然后使用TransferObject对象保存文件的相关信息,最后使用JSch库的功能来建立SFTP连接并进行文件的上传操作。具体的代码实现可以参考引用中的示例代码以及引用中提供的ChannelSftp常用API。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java使用SFTP上传文件到服务器的简单使用](https://download.csdn.net/download/weixin_38677725/12785915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [java- SFTP文件上传下载](https://blog.csdn.net/weixin_44783506/article/details/129271770)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值