Dúvidas com manipulação de arquivo via SFTP

1 resposta
W

Prezados, boa noite
Estou Usando a classe JSch para manipular os arquivos via SFTP de um servidor para o outro. Já fiz a conexão e estou conseguindo transferir um determinado arquivo de um lado para o outro, porém estou com dúvida quanto ao envio desse arquivo para o outro servidor… a função GET do JSCH me devolve um INPUTSTREAM e a função PUT me pede um OUtpuStream para enviar.
Hoje estou baixando o arquivo para um diretório temporário (Criado em tempo de execução) colocando lá e passando para a função PUT do SFTP o caminho completo.
Porém como a aplicação vai fucionar para várias trasferencias, não posso trabalhar assim… Existe alguma maneira para eu guardar os arquivos em um buffer (Lista de arquivos) para depois transferir um a um no loop dessa lista? Segue meu código…

createFolderTemporarioEnvioSFTP();

connectionOrigem = new Connection().conectaservidor(argument.getCdUsuarioOrigem(),
argument.getDsServidorOrigem(), argument.getCdSenhaOrigem(), 22);

Vector<LsEntry> entries = connectionOrigem.ls("/home/sonda/teste/");
        for (LsEntry entry : entries) {
            // System.out.println("Lendo arquivo " +entry.getFilename());

            if (extensao.equals(".*")) {

                OutputStream output = new FileOutputStream(new File("DIRETORIOTEMPORARIO/arquivo"));
                connectionOrigem.get(argument.getDsDiretorioOrigem(), output);
                output.close();

            } else {

                if (entry.getFilename().toUpperCase().endsWith(extensao)) {
                    OutputStream output = new FileOutputStream(new File("DIRETORIOTEMPORARIO/arquivo"));
                    connectionOrigem.get(argument.getDsDiretorioOrigem(), output);
                    output.close();
                }

            }

        }
    }
            

            //loo´p no diretorio temporario enviando para o servidor de destino
            
            InputStream fis = new FileInputStream(DIREOTRIODESTINO);
            connectionDestino.put(fis, dsDiretorioDestino + fileName);
            fis.close();
            

        if (argument.getBlEliminaArquivoOrigem().trim().toUpperCase().equals("S")) {
            connectionOrigem.rm(argument.getDsDiretorioOrigem());
        }
        
        deletefoldertemp()

1 Resposta

W

Em outras palavras, não posso mais baixar o arquivo para um diretório temporário, tenho que colocar em um buffer e transferir na hora qu estou lendo.

Criado 11 de março de 2016
Ultima resposta 11 de mar. de 2016
Respostas 1
Participantes 1