我需要通过SSH从RaspberryPi Model 3b +下载txt文件,并想在Android设备上存储另一个文件。问题是文件下载失败。
IDE:Android Studio | SSH库: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;
}
我希望文件将以字符串形式下载,并且该字符串将以return语句的形式返回。
答案 0 :(得分:0)
InputStream.toString()
不会将流的内容转换为字符串。 InputStream
未实现toString()
方法。因此,您实际上在调用基本的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?