jsch删除服务器文件夹,使用jcraft.jsch更改目录时文件夹不存在

我在Linux机器上运行一个Java程序,它使用jcraft.jsch库连接到外部sftp服务器。代码如下:

JSch jsch = new JSch();

Session session = null;

Channel channel = null;

ChannelSftp c = null;

session = jsch.getSession(ftpUserName, ftpHost, ftpPort);

session.setPassword(ftpPassword);

channel = session.openChannel("sftp");

channel.connect();

c = (ChannelSftp)channel;

fn = c.ls("/Inbox");

c.cd("/Inbox"); //-- this line throws an error

出于某种原因,当我运行更改目录命令" c.cd"我明白了:

4: Folder not found: /drwxr-x--- 2 ftpadmin ftpadmin 0 Jan 01 1970 /Inbox

这很奇怪,因为该文件夹的列表(c.ls)不会引发异常。

此外,如果我从同一台Linux服务器命令行lftp,我可以没有任何问题。

aJoYp.png

stacktrace指向cd方法中的_stat方法。

at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2108)

at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:1676)

at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:290)

at BW_Utilities.ftp.test.testFtpJsch(test.java:81)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

当我从桌面使用Filezilla进行连接时,远程站点的文件夹结构如下所示:

fP02U.png

我刚刚在我的Windows桌面计算机上执行相同的Java代码,cd命令工作正常。 (Windows机器运行JDK 1.6.0_29而Linux服务器运行JRE 1.6.0.27)

jsch是否依赖客户端操作系统级别的其他库?

知道如何解决这个问题?

重要的更新

我能够在我的开发机器上重现错误。它与使用的jsch版本有关。 linux服务器使用的是jsch-0.1.31,而dev机器使用的是jsch-0.1.52。似乎导致错误的任何内容已在版本0.1.52中得到解决。 Wooot! Wooot!终于来了!

谢谢

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值