Como obter a lista de arquivos de um servidor SFTP?
Estou com um problema e espero conseguir uma solução. Também escrevi algum código, mas ele precisa de algumas modificações.
Problema: tenho um servidor SFTP (para fins de privacidade, darei credenciais falsas) às quais preciso me conectar.
Nome do servidor: server-name porta: 22 nome de usuário: nome de usuário senha: senha
Quando eu me conecto ao servidor, ele automaticamente cai no diretório "/ FGV". dentro deste diretório existem outras pastas. Preciso pegar uma lista de mensagens xml do diretório "/ FGV / US / BS /" e colocá-las em uma lista (arquivos na forma de arquivo). Na lista, preciso ter o diretório do arquivo, o nome e o corpo do arquivo. Eu estava pensando em criar um objeto e colocar essas informações lá e criar uma lista desse objeto.
Meu código atual cria uma conexão e baixa apenas UM arquivo xml. Se houver dois arquivos xml, o arquivo na minha máquina local não terá nada como conteúdo.
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class SFTPinJava {
public SFTPinJava() {
}
public static void main(String[] args) {
String SFTPHOST = "server-name";
int SFTPPORT = 22;
String SFTPUSER = "username";
String SFTPPASS = "password";
String SFTPWORKINGDIR = "/FGV";
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
try {
JSch jsch = new JSch();
session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
session.setPassword(SFTPPASS);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
channelSftp.cd(SFTPWORKINGDIR);
byte[] buffer = new byte[1024];
BufferedInputStream bis = new BufferedInputStream(
channelSftp.get("/FGV/US/BS/FGVCustomsEntryLoaderService.xml"));
File newFile = new File(
"C:\\workspace\\Crap\\src\\org\\raghav\\stuff\\XML_FROM_SERVER.xml");
OutputStream os = new FileOutputStream(newFile);
BufferedOutputStream bos = new BufferedOutputStream(os);
int readCount;
//System.out.println("Getting: " + theLine);
while ((readCount = bis.read(buffer)) > 0) {
//System.out.println("Writing: ");
bos.write(buffer, 0, readCount);
}
while(session != null){
System.out.println("Killing the session");
session.disconnect();
bis.close();
bos.close();
System.exit(0);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Preciso alterar esse código para que ele pegue vários arquivos e os coloque em uma lista de objetos. esse objeto deve ter o diretório do arquivo, o nome e o corpo do arquivo.
Alguém pode me ajudar?
Obrigado antecipadamente.