首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用jcraft.jsch更改目录时文件夹不存在

使用jcraft.jsch更改目录时文件夹不存在
EN

Stack Overflow用户
提问于 2016-07-30 23:36:34
回答 2查看 4.7K关注 0票数 2

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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“时,我得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
4: Folder not found: /drwxr-x--- 2 ftpadmin ftpadmin        0 Jan 01 1970 /Inbox

这很奇怪,因为该文件夹的列表(c.ls)没有抛出异常。

此外,如果我从同一个Linux服务器从命令行执行lftp,我可以毫无问题地执行cd。

堆栈跟踪指向cd方法中的_stat方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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进行连接时,远程站点的文件夹结构如下所示:

我只是在我的windows桌面机器上执行了相同的Java代码,cd命令就起作用了。(Windows机器运行JDK 1.6.0_29,Linux服务器运行JRE 1.6.0.27)

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

你知道如何解决这个问题吗?

重要更新

我能够在我的dev机器上重现这个错误。这与使用的jsch版本有关。linux服务器使用jsch-0.1.31,而dev机器使用jsch-0.1.52。似乎导致错误的原因已经在版本0.1.52中得到了解决。哇!哇!终于来了!

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-01 09:32:44

升级到jsch版本0.1.52可以解决此问题。

票数 2
EN

Stack Overflow用户

发布于 2016-07-31 00:12:50

尝试执行以下操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fn = c.ls("Inbox");
c.cd("Inbox");  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38679471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文