java通过sftp形式连接主机下载文件(附项目与主机编码不一致解决方法)

本文介绍如何使用Java通过SFTP连接远程主机下载文件,并着重解决项目编码(UTF-8)与主机编码(GBK)不一致导致的问题。通过设置ChannelSftp的编码并处理版本限制,利用反射技术修改属性值,最终成功实现文件下载。
摘要由CSDN通过智能技术生成

最近接了一个文件下载接口需求,需要采用sftp形式与对端主机连接,进行文件传输。

首先引入java操作sftp的工具类包:

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

编写文件工具类(包含sftp连接、断开、下载文件等方法)

/**

  • sftp形式下载文件
  • @author wangshuai

*/
@Slf4j
public class SFTPUtil {

private ChannelSftp sftp = new ChannelSftp();

private Session session;
/**
 * SFTP 登录用户名
 */
private String username;
/**
 * SFTP 登录密码
 */
private String password;
/**
 * 私钥
 */
private String privateKey;
/**
 * SFTP 服务器地址IP地址
 */
private String host;
/**
 * SFTP 端口
 */
private int port;

/**
 * 构造基于密码认证的sftp对象
 */
public SFTPUtil(String username, String password, String host, int port) {
    this.username = username;
    this.password = password;
    this.host = host;
    this.port = port;
}

/**
 * 构造基于秘钥认证的sftp对象
 */
public SFTPUtil(String username, String host, int port, String privateKey) {
    this.username = username;
    this.host = host;
    this.port = port;
    this.privateKey = privateKey;
}

public SFTPUtil() {
}

/**
 * 连接sftp服务器
 */
public void login() {
    try {

        JSch jsch = new JSch();
        if (privateKey != null) {
            jsch.addIdentity(privateKey);// 设置私钥
        }

        session = jsch.getSession(username, host, port);

        if (password != null) {
            session.setPa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值