Загрузите содержимое файла в строку с помощью JSch - PullRequest
1 голос
/ 20 мая 2019

Мне нужно скачать TXT-файл с RaspberryPi Model 3b + через SSH и хочу сохранить другой файл на устройстве Android.Проблема в том, что загрузка файла не удалась.

IDE: Android Studio |SSH Libary: JSch

Я пробовал множество различных примеров кода, которые почти все делали одинаково.Но они также не работали.Решения от других работают с задачами ASync.Если это решение моей проблемы, может кто-нибудь написать пример кода для асинхронного раздела?Я действительно не знаю, как с этим работать.

Вот мой код:

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;
}

Я ожидаю, что файл будет загружен как строка, и эта строка будет возвращена каквозврат заявления.

1 Ответ

0 голосов
/ 20 мая 2019

InputStream.toString() не преобразует содержимое потока в строку.InputStream не реализует метод toString().Таким образом, вы фактически вызываете базовую Object.toString реализацию, которая бесполезна.

Правильный код см. Как мне прочитать / преобразовать InputStream в строку в Java?

Например, в Java 8 вы можете сделать:

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

Обязательное предупреждение: не используйте StrictHostKeyChecking=no для слепого принятия всех ключей хоста.Это недостаток безопасности.Вы потеряете защиту от MITM-атак .

Для правильного (и безопасного) подхода см .:
Как разрешить Java UnknownHostKey при использовании библиотеки JSch SFTP?

...