首页 > 解决方案 > 如何覆盖 ChannelSftp.lstat 方法以便在 Jsch 中返回 false 而不是 SftpException

问题描述

当前的定义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世界很陌生,我想知道我们如何覆盖ChannelSftp.lstat方法,以便在文件不存在时返回false(ChannelSftp.SSH_FX_NO_SUCH_FILE)以及在所有其他情况下(对于文件不存在以外的所有异常)抛出SftpException自身.

标签: javajsch

解决方案


推荐阅读