Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JSch ChannelSftp:调用ChannelSftp.cd(…)和ls(…)方法时需要什么文件处理?_Java_File_Io_Sftp_Jsch - Fatal编程技术网

Java 使用JSch ChannelSftp:调用ChannelSftp.cd(…)和ls(…)方法时需要什么文件处理?

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

下面是代码,其中通道对象初始化为: (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.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()
之前记录JSch
Session.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()
之前记录JSch
Session.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);