web-dev-qa-db-fra.com

Transfert de fichiers SFTP en utilisant Java JSch

Voici mon code, qui récupère le contenu du fichier, sur le serveur distant et l'affiche en sortie.

package sshexample;

import com.jcraft.jsch.*;
import Java.io.*;

public class SSHexample 
{
public static void main(String[] args) 
{
    String user = "user";
    String password = "password";
    String Host = "192.168.100.103";
    int port=22;

    String remoteFile="sample.txt";

    try
    {
        JSch jsch = new JSch();
        Session session = jsch.getSession(user, Host, port);
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");
        System.out.println("Establishing Connection...");
        session.connect();
        System.out.println("Connection established.");
        System.out.println("Creating SFTP Channel.");
        ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
        sftpChannel.connect();
        System.out.println("SFTP Channel created.");
        InputStream out= null;
        out= sftpChannel.get(remoteFile);
        BufferedReader br = new BufferedReader(new InputStreamReader(out));
        String line;
        while ((line = br.readLine()) != null) 
        {
            System.out.println(line);
        }
        br.close();
        sftpChannel.disconnect();
        session.disconnect();
    }
    catch(JSchException | SftpException | IOException e)
    {
        System.out.println(e);
    }
}
}

Maintenant, comment implémenter ce programme que le fichier est copié dans l'hôte local et comment copier un fichier de l'hôte local sur le serveur.

Voici comment faire fonctionner le transfert de fichiers pour tout format de fichiers.

24
MAHI

Le moyen le plus simple de télécharger un fichier via SFTP avec JSch est:

JSch jsch = new JSch();
Session session = jsch.getSession(user, Host);
session.setPassword(password);
session.connect();

ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();

sftpChannel.put("C:/source/local/path/file.Zip", "/target/remote/path/file.Zip");

De même pour un téléchargement:

sftpChannel.get("/source/remote/path/file.Zip", "C:/target/local/path/file.Zip");

Vous devrez peut-être gérer l'exception UnknownHostKey .

16
Martin Prikryl

Usage:

sftp("file:/C:/home/file.txt", "ssh://user:pass@Host/home");
sftp("ssh://user:pass@Host/home/file.txt", "file:/C:/home");

Mise en œuvre

7
Mykhaylo Adamovych

Le code ci-dessous fonctionne pour moi

   public static void sftpsript(String filepath) {

 try {
  String user ="demouser"; // username for remote Host
  String password ="demo123"; // password of the remote Host

   String Host = "demo.net"; // remote Host address
  JSch jsch = new JSch();
  Session session = jsch.getSession(user, Host);
  session.setPassword(password);
  session.connect();

  ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
  sftpChannel.connect();

  sftpChannel.put("I:/demo/myOutFile.txt", "/tmp/QA_Auto/myOutFile.Zip");
  sftpChannel.disconnect();
  session.disconnect();
 }catch(Exception ex){
     ex.printStackTrace();
 }
   }
3
Shubham Jain