La tarea de crear un cliente SFTP en Java se volvio una tarea realmente sencilla gracias a la librería JSCH. JSch es una implementación del protocolo SSH2 en Java (que permite usar el canal SFTP). Esta librería te permite conectarte a un servidor sshd y usar redirección de puertos, redirección X11, transferencia de archivos, etc. además puedes integrar dichas funcionalidades a tus propios programas en Java. Esta librería se encuentra licenciada bajo la licencia BSD.
Con el fin de descargar un archivo de cualquier tipo desde un servidor remoto a tu dispositivo con Java, puedes usar el siguiente snippet basado en JSCH:
// Recuerda importar la libreria
import com.jcraft.jsch.*;
/// En tu implementación
try {
JSch ssh = new JSch();
Session session = ssh.getSession("nombredeUsuario", "myip90000.ordomain.com", 22);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword("contraseña");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftp = (ChannelSftp) channel;
sftp.cd(directory);
// Usa el método get, si estás usando android recuerda remover el prefijo "file://" de la URL del archivo
sftp.get("/var/www/remote/myfile.txt","/storage/0/myfile.txt");
Boolean success = true;
if(success){
// El archivo ha sido subido satisfactoriamente
}
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();
}
Esta función te ayudará a descargar el archivo remoto con el método get. Solamente necesitas saber el directorio remoto del archivo y asignar uno nuevo al directorio local. Cabe destacar que debes tener tanto permisos de lectura en el servidor como de escritura en tu entorno local. Recuerda además que esto es solamente un ejemplo, este no incluye ningun tipo de seguridad. Necesitarás añadir un archivo known_hosts si tu servidor usa uno o añadir una llave privada para autenticación.
Este código funciona en cualquier plataforma en la que se pueda ejecutar Java y la librería JSCH (Android, aplicaciones de escritorio etc).
Conviertete en un programador más sociable