Java SFTP使用JSch上传,但是如何覆盖当前文件?

Posted

技术标签:

【中文标题】Java SFTP使用JSch上传,但是如何覆盖当前文件?【英文标题】:Java SFTP upload using JSch, but how to overwrite the current file? 【发布时间】:2013-07-02 15:25:38 【问题描述】:

我正在尝试使用 JSch 将两个文件上传到带有 SFTP 的服务器。如果目录为空,则上传文件可以正常工作,但我想一遍又一遍地上传相同的文件(只是更改内部的 id),但我不知道该怎么做。 JSch中有一些静态参数叫做OVERWRITE,但是我不知道怎么用。

有人愿意告诉我应该如何添加此设置吗?

这是我当前的代码:

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();
  

【问题讨论】:

【参考方案1】:

我从未使用过 JSch,但从外观上看,有许多重载的 put 方法,其中一个与您当前的签名相匹配,并添加了一个“模式”参数,并且 ChannelSftp 中似乎有三个静态模式参数class (OVERWRITE = 0, RESUME = 1, APPEND = 2) 所以你应该可以使用:

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

【讨论】:

以上是关于Java SFTP使用JSch上传,但是如何覆盖当前文件?的主要内容,如果未能解决你的问题,请参考以下文章

JSch - Java实现的SFTP(文件上传详解篇)

JSch - Java实现的SFTP(文件上传详解篇)

Java利用JSch实现sftp通过ssh上传下载删除文件及配置代码

jsch的sftp在多线程下的问题及处理办法

用JSch实现SFTP文件上传

JAVA Sftp 上传下载