如何在Android中使用JSCH(SFTP)列出远程路径

【如何在Android中使用JSCH(SFTP)列出远程路径】使用JSCH库, 使用Java创建sftp客户端变得非常容易。
JSch是SSH2的纯Java实现(我们可以使用SFTP Channel)。 JSch允许你连接到sshd服务器并使用端口转发, X11转发, 文件传输等, 并且可以将其功能集成到你自己的Java程序中。 JSch已获得BSD样式许可。
你可以使用以下代码检索远程路径(列表)的内容以向用户显示

// Remember use the required imports (the library as well) using :import com.jcraft.jsch.*; import com.jcraft.jsch.ChannelSftp.LsEntry; /// then in our functiontry {      JSch ssh = new JSch();       Session session = ssh.getSession("username", "myip90000.ordomain.com", 22);           // Remember that this is just for testing and we need a quick access, you can add an identity and known_hosts file to prevent// Man In the Middle attacks      java.util.Properties config = new java.util.Properties();       config.put("StrictHostKeyChecking", "no");       session.setConfig(config);   session.setPassword("Passw0rd");   session.connect();     Channel channel = session.openChannel("sftp");       channel.connect();       ChannelSftp sftp = (ChannelSftp) channel;                   // Now that we have a channel, go to a directory first if we want .. you can give to the ls the path      // sftp.cd("/var/www/mydirectory");       @SuppressWarnings("unchecked")            // Get the content of the actual path using ls instruction or use the previous string of the cd instruction      java.util.Vector< LsEntry> flLst = sftp.ls("/var/www/mydirectory");       final int i = flLst.size(); // show the info of every folder/file in the console      for(int j = 0; j< i ; j++){        LsEntry entry = flLst.get(j);         SftpATTRS attr = entry.getAttrs();         System.out.println(entry.getFilename());         System.out.println(directory + "/" + entry.getFilename()); // Remote filepath        System.out.println("isDir", attr.isDir()); // Is folder      System.out.println("isLink", attr.isLink()); // is link        System.out.println("size", attr.getSize()); // get size in bytes of the file          System.out.println("permissions", attr.getPermissions()); // permissions        System.out.println("permissions_string", attr.getPermissionsString());         System.out.println("longname", entry.toString());                                   }    channel.disconnect();     session.disconnect(); } catch (JSchException e) {  System.out.println(e.getMessage().toString());     e.printStackTrace();   } catch (SftpException e) {    System.out.println(e.getMessage().toString());     e.printStackTrace(); }

ls函数将为你解决问题, 它将返回带有路径信息的LsEntry, 然后你可以轻松获取每个条目的内容。
请记住, 作为示例, 这不包括任何安全性。如果服务器使用已知主机文件, 则需要添加已知主机文件;如果服务器使用私钥进行身份验证, 则需要添加标识。
此代码可在使用Java和JSCH库的任何平台(Android, 桌面等)上运行。

    推荐阅读