【问题标题】:java.lang.ClassCastException: com.jcraft.jsch.ChannelSftp$2 cannot be cast to java.io.FileInputStream [duplicate]java.lang.ClassCastException:com.jcraft.jsch.ChannelSftp$2 无法转换为 java.io.FileInputStream [重复]
【发布时间】:2019-04-30 15:24:34
【问题描述】:

我正在使用 sftp 通道作为输入流从远程服务器下载文件并尝试转换为文件输入流。然后我从 jvm 1.8 收到以下异常

java.lang.ClassCastException: com.jcraft.jsch.ChannelSftp$2 无法转换为 java.io.FileInputStream

请人帮忙。我被困在这里了

【问题讨论】:

  • 您需要显示代码的相关部分。无论如何:您尝试将某些内容转换为无法转换的内容,因为类型彼此不相关。
  • 无论Channel.getInputStream() 方法返回什么,它都不是FileInputStreamFileInputStreams 仅在您打开本地文件进行读取时创建。
  • 感谢Thomas,但我不明白的是异常参数必须是classcast异常输入流不能转换为fileinputstream,而是返回。 java.lang.ClassCastException:com.jcraft.jsch.ChannelSftp$2 无法转换为 java.io.FileInputStream
  • 该异常消息仅表示Channel.getInputStream() 创建并返回InputStream 的匿名子类,该子类由com.jcraft.jsch.ChannelSftp$2 标识。该类在github.com/rtyley/jsch/blob/master/src/com/jcraft/jsch/… 定义和实例化
  • 谢谢托马斯,我得到了我所期待的。感谢分享 git 链接

标签: java


【解决方案1】:

如果不创建临时文件,则无法从输入流转换为 FileInputStream。见:Convert InputStream into FileInputStream

如果你想从远程读取文件然后写入文件:

Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp channelSftp = (ChannelSftp) channel;
try {
    InputStream inputStream = channelSftp.get(srcPath);
    File file = //...
    OutputStream outputStream = new FileOutputStream(file);
    IOUtils.copy(inputStream, outputStream);
    outputStream.close();
} finally {
    channel.disconnect();
    session.disconnect();
}

您可以在此回复中删除它: How to convert InputStream to virtual File

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2018-11-07
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多