【问题标题】:will com.jcraft.jsch.ChannelSftp.get(String src,String dst) over rides the existing file?com.jcraft.jsch.ChannelSftp.get(String src,String dst) 会覆盖现有文件吗?
【发布时间】:2015-11-23 15:47:04
【问题描述】:

您好,我有一个场景,我需要从两个不同的位置下载一组同名的文件到我的本地计算机。

例子:

  • 远程位置一:user/temp1/sample.txt
  • 远程位置二:user1/temp2/sample.txt
  • 本地机器路径:user3/temp3/

我正在使用 java 和 com.jcraft.jsch.ChannelSftp.get(String src,String dst) 方法来执行此任务。我的疑问是,当我执行第一个操作时,将位置一个 sample.txt 文件下载到我的本地文件夹,并在执行第二个操作时,将位置两个文件下载到我的同一个本地文件夹。第一个下载的文件会附加第二个远程 sample.txt 文件数据,还是会被新文件替换,还是会创建一个名为 sample(1).txt 的新文件?

【问题讨论】:

    标签: java sftp


    【解决方案1】:

    如果您检查javadoc,您会看到get(src, dest) 方法的默认模式是OVERWRITE,因此默认情况下您的第一个文件将被第二个文件覆盖。不同模式的含义是:

    • OVERWRITE - 覆盖现有文件(如果有)。

    • RESUME - 恢复中断的上传/下载。这只会传输超出现有目标文件长度的源文件部分。

    • APPEND - 文件传输模式:附加到现有文件(如果有)。

    【讨论】:

    • 感谢您的回复和 javaDoc 链接 Gergely Basco。我找不到将模式更改为 APPEND 的方法,我的意思是我没有找到更改模式的方法,例如 setMode(APPEND) 或 setMode(2) 或 get(src,dst,APPEND)?你能帮我找到正确的方法吗
    • 您只需要使用正确的get 方法即可实现。类似于:get(src, dst, null, 2); //progressmonitor 设置为 null,你不需要它 & mode=2 表示追加
    • .put(src, dst, SftpChannel.APPEND) for put(String src, String dst, int mode) (评论重新发布,更新链接,最初发布于 2015 年 11 月)
    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多