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

2022-09-02 13:05:59

我正在尝试使用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,但从外观上看,有许多重载的放置方法,其中一个通过添加“mode”参数来匹配您当前的签名,并且ChannelSftp类中似乎有三个静态模式参数(OVERWRITE = 0,RESUME = 1,APPEND = 2),因此您应该能够使用:

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


答案 2

推荐