java - 使用 JSch 将文件内容下载到字符串
问题描述
我需要通过 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;
}
我希望该文件将作为字符串下载,并且该字符串将作为返回语句返回。
解决方案
InputStream.toString()
不会将流的内容转换为字符串。InputStream
不实现toString()
方法。因此,您实际上是在调用基本Object.toString
实现,这是无用的。
有关正确的代码,请参阅如何在 Java 中将 InputStream 读取/转换为字符串?
例如,在 Java 8 中,您可以执行以下操作:
String output =
new BufferedReader(new InputStreamReader(channelSftp.get(targetFile)))
.lines().collect(Collectors.joining("\n"));
强制警告:不要StrictHostKeyChecking=no
用于盲目接受所有主机密钥。那是一个安全漏洞。您失去了对MITM 攻击的保护。
有关正确(且安全)的方法,请参阅:
How to resolve Java UnknownHostKey, while using JSch SFTP library?
推荐阅读
- active-directory - 使用 ms-Ds-Consistency Guid 从 Active Directory 检索用户
- emoji - 如何将表情符号微笑插入 ld+json 中的常见问题解答微数据?
- google-cloud-composer - 用气流清洁过去的 ai 平台模型版本
- angular - 使用 HTML 标记在 Typescript 中突出显示文本中的单词
- symfony - 删除 sylius 装置中的美国频道
- python - 如何使用 selenium 和 chromewebdriver 单击hackerrank 的登录按钮?
- excel - 移动具有部分名称的工作表
- python-3.x - 如何在 python 中对 fashion_mnist 数据集使用 ctc_loss 函数
- python - pip install awscli : pip: 找不到命令?
- xml - 在 Scala 中评估 Xpath