web-dev-qa-db-fra.com

Java SFTP upload en utilisant JSch, mais comment écraser le fichier actuel?

J'essaie de télécharger deux fichiers sur un serveur avec SFTP en utilisant JSch. Cela fonctionne très bien pour télécharger les fichiers si le répertoire est vide mais je veux télécharger le même fichier encore et encore (juste changer un identifiant à l'intérieur) mais je ne peux pas comprendre comment faire cela. Il y a un paramètre statique dans JSch appelé OVERWRITE mais je ne peux pas savoir comment l'utiliser.

Quelqu'un veut-il me montrer comment ajouter ce paramètre?

Voici mon code actuel:

public void upload() {
  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);

    File f1 = new File("ext_files/" + FILETOTRANSFER1);
channelSftp.put(new FileInputStream(f1), f1.getName());
File f2 = new File("ext_files/" + FILETOTRANSFER2);
channelSftp.put(new FileInputStream(f2), f2.getName());

channelSftp.exit();
session.disconnect();
} catch (Exception ex) {
  ex.printStackTrace();
  }
}
18
Sebastian L

Je n'ai jamais utilisé JSch mais à première vue, il existe un certain nombre de méthodes put surchargées où l'une correspond à votre signature actuelle avec l'ajout d'un paramètre "mode" et il semble y avoir trois paramètres de mode statique dans la classe ChannelSftp (OVERWRITE = 0, RESUME = 1, APPEND = 2) donc vous devriez pouvoir utiliser:

channelSftp.put(new FileInputStream(f1), f1.getName(), ChannelSftp.OVERWRITE);

21
Hyddan