代码之家  ›  专栏  ›  技术社区  ›  user3742125

如何重写ChannelSftp.lstat方法,以便在Jsch中返回false而不是SftpException

  •  0
  • user3742125  · 技术社区  · 8 年前

    当前的定义 ChannelSftp.lstat 详情如下。

    public SftpATTRS lstat(String path) throws SftpException {
            try {
                ((MyPipedInputStream)this.io_in).updateReadSide();
                path = this.remoteAbsolutePath(path);
                path = this.isUnique(path);
                return this._lstat(path);
            } catch (Exception var3) {
                if (var3 instanceof SftpException) {
                    throw (SftpException)var3;
                } else if (var3 instanceof Throwable) {
                    throw new SftpException(4, "", var3);
                } else {
                    throw new SftpException(4, "");
                }
            }
        }
    
    private SftpATTRS _lstat(String path) throws SftpException {
            try {
                this.sendLSTAT(Util.str2byte(path, this.fEncoding));
                ChannelSftp.Header header = new ChannelSftp.Header();
                header = this.header(this.buf, header);
                int length = header.length;
                int type = header.type;
                this.fill(this.buf, length);
                if (type != 105) {
                    if (type == 101) {
                        int i = this.buf.getInt();
                        this.throwStatusError(this.buf, i);
                    }
    
                    throw new SftpException(4, "");
                } else {
                    SftpATTRS attr = SftpATTRS.getATTR(this.buf);
                    return attr;
                }
            } catch (Exception var6) {
                if (var6 instanceof SftpException) {
                    throw (SftpException)var6;
                } else if (var6 instanceof Throwable) {
                    throw new SftpException(4, "", var6);
                } else {
                    throw new SftpException(4, "");
                }
            }
        }
    

    由于我对java世界非常陌生,我想知道如何覆盖 通道SFTP.lstat 方法,以便在文件不存在时返回false( ChannelSftp.SSH_FX_NO_SUCH_FILE )并在所有其他情况下(对于除文件不存在以外的所有异常)抛出 SftpException

    0 回复  |  直到 8 年前