Java 使用JSch ChannelSftp:调用ChannelSftp.cd(…)和ls(…)方法时需要什么文件处理?
下面是代码,其中通道对象初始化为: (Sftp是一个内部文件。假设changeDirectory()方法是此类的一部分。) 执行此代码时,我收到以下格式的错误:Java 使用JSch ChannelSftp:调用ChannelSftp.cd(…)和ls(…)方法时需要什么文件处理?,java,file,io,sftp,jsch,Java,File,Io,Sftp,Jsch,下面是代码,其中通道对象初始化为: (Sftp是一个内部文件。假设changeDirectory()方法是此类的一部分。) 执行此代码时,我收到以下格式的错误: Caused by: 4: at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:359) at com.dclear.cmn.cms.net.Sftp.changeDirectory(Sftp.java:139) at com.dclear.cmn.cms.net.Sftp.recei
Caused by: 4:
at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:359)
at com.dclear.cmn.cms.net.Sftp.changeDirectory(Sftp.java:139)
at com.dclear.cmn.cms.net.Sftp.receiveFile(Sftp.java:80)
... 7 more
Caused by: java.lang.IndexOutOfBoundsException
at java.io.PipedInputStream.read(PipedInputStream.java:372)
at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2869)
at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2861)
at com.jcraft.jsch.ChannelSftp._realpath(ChannelSftp.java:2319)
at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:342)
... 9 more
然而,当我深入研究时,我明白为了避免这种IndexOutOfBoundsException,我必须注意以下几点:
len为负数,或len大于b.length-off
其中:
但是,这是非常内部的代码..在调用文件上的cd(..)方法之前,如何保持检查??我有文件位置和文件大小
对于一些文件,我也得到以下例外:
Exception: failed to get directory listing in SFTP protocol....
4:
at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2187)
at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2202)
at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1566)
at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1527)
当代码调用时会出现:
List<LsEntry> ls = sftpChannel.ls(remoteDirectory);
List ls=sftpChannel.ls(远程目录);
有没有避免这些随机错误的输入?我敢肯定,这是因为遗漏了一些文件处理,因此对于不同的文件,它的行为是不同的
FYI jsch版本:jsch\1.5\jsch-0.1.50.jar ChannelSftp(版本1.4:48.0,超级位)什么版本的jsch?您也在连接哪个SFTP服务器(供应商,版本)?@MartinPrikryl jsch version:jsch\1.5\jsch-0.1.50.jar ChannelSftp(版本1.4:48.0,超级位)@MartinPrikryl我没有收到您的问题?你能给我举个例子吗?你正在连接的SFTP/SSH服务器是什么?如果您不知道,请启用并向我们显示日志。或者(更简单),使用一些GUI SFTP客户端(例如),启用日志并向我们显示日志。另一种方法是在调用
.cd()
之前记录JSchSession.getServerVersion()
的值。JSch的哪个版本?您也在连接哪个SFTP服务器(供应商,版本)?@MartinPrikryl jsch version:jsch\1.5\jsch-0.1.50.jar ChannelSftp(版本1.4:48.0,超级位)@MartinPrikryl我没有收到您的问题?你能给我举个例子吗?你正在连接的SFTP/SSH服务器是什么?如果您不知道,请启用并向我们显示日志。或者(更简单),使用一些GUI SFTP客户端(例如),启用日志记录并向我们显示日志。另一种方法是在调用.cd()
之前记录JSchSession.getServerVersion()
的值。
Exception: failed to get directory listing in SFTP protocol....
4:
at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2187)
at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2202)
at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1566)
at com.jcraft.jsch.ChannelSftp.ls(ChannelSftp.java:1527)
List<LsEntry> ls = sftpChannel.ls(remoteDirectory);