【问题标题】:Download a file contents to string with JSch使用 JSch 将文件内容下载到字符串
【发布时间】:2019-10-06 23:32:58
【问题描述】:

我需要通过 SSH 从 RaspberryPi Model 3b+ 下载一个 txt 文件,并希望在 android 设备上存储另一个文件。问题是文件下载失败。

IDE:Android Studio | SSH 库:JSch

我尝试了很多不同的代码示例,几乎所有的代码都是一样的。但他们也没有工作。 其他人的解决方案正在处理异步任务。如果这是我的问题的解决方案,有人可以为异步部分编写示例代码吗?我真的不知道如何处理它。

这是我的代码:

public static String username = "BIOGAS";
public static String host = "192.168.1.29";
public static String password = "clientOG58";
public static String targetFile = "/home/BIOGAS/ies/data.txt";
public static int port = 22;

public String download() throws Exception {
    JSch jsch = new JSch();
    Session session = null;
    String r = "No Data";
    try {
        session = jsch.getSession(username, host, port);
        session.setConfig("StrictHostKeyChecking", "no");
        session.setPassword(password);
        session.connect();

        Channel channel = session.openChannel("sftp");
        channel.connect();
        ChannelSftp sftpChannel = (ChannelSftp) channel;

        r = "" + sftpChannel.get(targetFile).toString();

        sftpChannel.exit();
        session.disconnect();
    } catch (JSchException e) {
        e.printStackTrace();
    } catch (SftpException e) {
        e.printStackTrace();
    }

    return r;
}

我希望文件将作为字符串下载,并且该字符串将作为返回语句返回。

【问题讨论】:

    标签: java ssh stream sftp jsch


    【解决方案1】:

    InputStream.toString() 不会将流的内容转换为字符串。 InputStream 没有实现 toString() 方法。所以你实际上是在调用 base Object.toString 实现,这是没用的。

    有关正确代码,请参阅How do I read / convert an InputStream into a String in Java?

    例如,在 Java 8 中,您可以这样做:

    String output =
        new BufferedReader(new InputStreamReader(channelSftp.get(targetFile)))
            .lines().collect(Collectors.joining("\n"));
    

    强制警告:不要使用StrictHostKeyChecking=no 盲目接受所有主机密钥。那是一个安全漏洞。您将失去对MITM attacks 的保护。

    有关正确(且安全)的方法,请参阅:
    How to resolve Java UnknownHostKey, while using JSch SFTP library?

    【讨论】:

      猜你喜欢
      • 2017-11-08
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多