Java从sftp服务器上传与下载文件

这篇具有很好参考价值的文章主要介绍了Java从sftp服务器上传与下载文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

业务需要从sftp服务器上上传、下载、删除文件等功能,通过查阅资料及手动敲打代码,实现了操作sftp的基本功能,有需求的小伙伴可以看看具体的实现过程。

二、sftp介绍

摘自百度百科:SSH文件传输协议,是一种数据流链接,提供文件访问、传输和管理功能的网络传输协议。

SFTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。

三、具体代码实现

1、引入以下依赖


<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.54</version>
</dependency>

2、编写一个sftp工具类

含以下方法:

*获取一个sftp通道

*关闭sftp连接

*下载文件

*上传文件

*删除文件

其他方法自行拓展


import com.jcraft.jsch.*;
import java.io.*;
import java.util.Properties;

/**
 * sftp工具类,包含以下功能:
 * 获取sftp链接
 * 关闭sftp链接
 * 下载文件
 * 上传文件
 * 删除文件
 * 查找文件
 * 更多功能自行拓展
 */
public class SftpUtil {

    /**
     * 获取一个sftp链接
     * @param host sftp服务器ip
     * @param port 端口
     * @param username 用户名
     * @param password 密码
     * @return 返回ChannelSftp
     * @throws Exception 获取通道时的异常
     */
    public static ChannelSftp getSftpChannel(String host, Integer port, String username, String password) throws Exception{
        Session session;
        Channel channel = null;
        JSch jSch = new JSch();
        try {
            session = jSch.getSession(username, host, port);
            session.setPassword(password);

            // 配置链接的属性
            Properties properties = new Properties();
            properties.setProperty("StrictHostKeyChecking","no");
            session.setConfig(properties);

            // 进行sftp链接
            session.connect();

            // 获取通信通道
            channel = session.openChannel("sftp");
            channel.connect();
        } catch (JSchException e) {
            e.printStackTrace();
            throw e;
        }
        return (ChannelSftp)channel;
    }

    /**
     * 上传文件
     * @param channelSftp sftp通道
     * @param localFile 本地文件
     * @param remoteFile 远程文件
     */
    public static void upload(ChannelSftp channelSftp, String localFile, String remoteFile) throws Exception{
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream(localFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        
        channelSftp.put(inputStream, remoteFile);
        
        inputStream.close();
        
    }

    /**
     * 从sftp服务器上下载文件
     * @param channelSftp sftp通道
     * @param remoteFile 远程文件
     * @param localFile 本地文件
     */
    public static void download(ChannelSftp channelSftp, String remoteFile, String localFile) throws Exception{
        OutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(localFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        
        channelSftp.get(remoteFile, outputStream);
        
        outputStream.close();
    }

    /**
     * 删除文件
     * @param channelSftp sftp通道
     * @param remoteFile 远程文件
     */
    public static void deleteFile(ChannelSftp channelSftp, String remoteFile) throws Exception{
        try {
            channelSftp.rm(remoteFile);
        } catch (SftpException e) {
            e.printStackTrace();
            throw e;
        }
    }

    /**
     * 关闭sftp链接
     * @param channelSftp sftp通道
     * @throws Exception 关闭session的异常
     */
    public static void closeSession(ChannelSftp channelSftp) throws Exception{
        if(channelSftp == null){
            return;
        }

        Session session = null;
        try {
            session = channelSftp.getSession();
        } catch (JSchException e) {
            e.printStackTrace();
            throw e;
        }finally {
            if(session != null){
                session.disconnect();
            }
        }

    }

}

3、测试连接、上传文件、下载文件、删除文件、关闭连接功能


public class TestSftp {

    public static void main(String[] args) throws Exception{
        String host = "your sftp host";
        Integer port = 22;
        String username = "your sftp user";
        String password = "your sftp password";

        // 获取sftp通道
        ChannelSftp channelSftp = SftpUtil.getSftpChannel(host, port, username, password);

        // 上传文件
        String local = "D:\\local\\upload.txt";
        String remote = "wly/upload.txt";
        SftpUtil.upload(channelSftp, local, remote);

        // 下载文件
        String remote2 = "wly/upload.txt";
        String local2 = "D:\\local\\test.txt";
        SftpUtil.download(channelSftp, remote2, local2);

        // 删除文件
        /*String remote3 = "wly/upload.txt";
        SftpUtil.deleteFile(channelSftp, remote3);*/

        // 关闭链接
        SftpUtil.closeSession(channelSftp);
    }

}

经过测试,能够正常连接上ftp服务器,并且上传下载文件,最后关闭连接。

四、参考连接

https://blog.csdn.net/MyBlogHiHi/article/details/119905438文章来源地址https://www.toymoban.com/news/detail-516464.html

到了这里,关于Java从sftp服务器上传与下载文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vscode远程连接服务器(remote ssh)+上传本地文件到服务器(sftp)

    一、vscode远程连接服务器 1.点击vscode右边工具栏点击拓展,搜索remote ssh并安装 2.安装完成后,左边工具栏会出现一个电脑图标的远程资源管理器,点击后选择SSH TARGETS的设置 3.然后选择第一个..sshconfig 4.向服务器管理员索要服务器的连接信息并修改ssh config文件   5.设置完成

    2024年02月01日
    浏览(33)
  • java- SFTP文件上传下载

    ​ JSch是Java Secure Channel的缩写,是一个java实现的可以完成sftp上传下载的工具,我们可以集成它的功能到自己的应用程序,本文介绍使用JSch实现的SFTP上传下载的功能。 ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如 方法名 功能描述 put() 文件上传 get() 文件下载

    2024年01月19日
    浏览(43)
  • 利用vscode--sftp,将本地项目/文件上传到远程服务器中详细教程

    1、首先在 vscode 中下载  sftp : 2、然后在 vscode 中打开本地将要上传的项目或文件:  3、安装完后,使用快捷键  ctrl+shift+P  打开指令窗口,输入  sftp:config  ,回车,在当前目录中会自动生成  .vscode  文件夹及  sftp.json host:工作站的IP地址 port:ssh的端口 username:工作站自

    2024年02月15日
    浏览(34)
  • cmd控制台通过sftp命令下载服务器文件

    因为同事电脑没有远程连接工具,所以使用cmd连接远程,打开cmd控制台。 1.sftp连接服务器 如果远程主机的 IP 是 192.168.1.100或者是域名www.test.cn,用户名是user,在命令行模式下输入:sftp user@192.168.1.100或者 user@www.test.cn。回车,根据提示输入密码。   2.如果下载的是文件夹,可

    2024年02月11日
    浏览(84)
  • java上传文件到指定服务器

    首先要知道服务器的用户名和密码。 注意:一般情况,如果不是强制要求,尽量不要将文件上传到服务器 步骤: 1.导入依赖 !--图片上传到服务器需要的依赖--         dependency             groupIdcom.jcraft/groupId             artifactIdjsch/artifactId             version0.1.54/version

    2024年01月21日
    浏览(35)
  • JAVA实现文件上传到服务器

    java如何实现大文件断点续传、秒传,JAVA实现文件上传到服务器,jsp实现文件上传到服务器,SpringBoot实现文件上传到服务器,SpringMVC实现文件上传到服务器,SpringCloud实现文件上传到服务器,webuploader实现文件上传到服务器,百度webuploader实现文件上传到服务器,JAVA如何将文件

    2024年04月27日
    浏览(27)
  • Java 上传文件到MinIO服务器上

    一、MinIO配置 主界面: 2.创建桶的文件路径 你可以设置任意想要配置的路径  3.管理桶权限 这里Prefix写 * 是为了匹配所有请求路径 Access: readonly就可以通过url访问图片了。 二、SpringBoot Maven项目: 导入坐标:  三、配置application.yml文件 四、编写读取配置类 五、创建工具类 六

    2024年02月08日
    浏览(33)
  • Java实现文件上传到ftp服务器

    文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的

    2024年02月14日
    浏览(32)
  • Java实现文件上传到服务器本地,并通过url访问

    Java实现文件上传到服务器本地,并通过url访问 有个需求,前端上传文件,需要用开关的方式同时支持上传七牛和服务器本地,方便不同的用户需求合理分配资源。本篇主要介绍文件上传到本地,然后通过url访问。 首先想到的就是可以通过SpringBoot通常访问静态资源的方式,当

    2024年02月03日
    浏览(43)
  • Java实现以form-data形式文件上传到服务器

    Java实现以form-data形式文件上传到服务器

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包