导模型.FTP&SFTP积累

1、

当使用jsch设置编码格式时
sftp.setFilenameEncoding("GBK"); 
出现如下错误:The encoding can not be changed for this sftp server。
使用的jar包是:jsch-0.1.54,经查看源码发现,版本是3-5的,都不支持设置文件名编码格式。

  1.1、

public void setFilenameEncoding(String encoding) throws SftpException{
    int sversion=getServerVersion();
    if(3 <= sversion && sversion <= 5 &&
       !encoding.equals(UTF8)){
      throw new SftpException(SSH_FX_FAILURE,
                              "The encoding can not be changed for this sftp server.");
    }
    if(encoding.equals(UTF8)){
      encoding=UTF8;
    }
    fEncoding=encoding;
    fEncoding_is_utf8=fEncoding.equals(UTF8);
  }

  1.2、解决方式:使用反射修改server_version的默认值即可。

JSch jsch = new JSch();
 
jsch.addIdentity("provateKey");
 
Session session = jsch.getSession("userName", "serverIp",“port”);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
ChannelSftp channelSftp = (ChannelSftp)session.openChannel("sftp");
channelSftp.connect();
 
// ZC: 下面就是 利用反射 设置 的代码 Class cl
= channelSftp.class; Field f1 =cl.getDeclaredField("server_version"); f1.setAccessible(true); f1.set(sftp, 2); channelSftp.setFilenameEncoding("gbk");

2、

3、

4、

5、

猜你喜欢

转载自www.cnblogs.com/DrMess/p/10168085.html