JAVA SFTP:通过JCH覆盖文件时。收到错误“错误消息”

时间:2019-04-10 13:06:47

标签: java sftp

我正在尝试将文件从一个目录复制到SFTP中的另一个目录。在目标目录中,文件名已经存在,我正在尝试覆盖它。但是,当我执行代码时,出现错误消息。 下面是Java代码

public static void main(String a[]) {
      try {
        JSch jsch = new JSch();
    Session session = jsch.getSession("root", "localhost", 22);
    session.setPassword("root");
    java.util.Properties config = new java.util.Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.connect();
    Channel channel = session.openChannel("sftp");
    channel.connect();
    ChannelSftp channelSftp = (ChannelSftp) channel;
    channelSftp.cd("/orderstatus");
    Vector<ChannelSftp.LsEntry> list = channelSftp.ls("*.txt");
    for(ChannelSftp.LsEntry entry : list) {
         System.out.println(entry.getFilename()); 
    }
     channelSftp.rename("test.txt", "/orderstatus/test1/test.txt");

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

我遇到错误

5: Bad message
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873)
at com.jcraft.jsch.ChannelSftp.rename(ChannelSftp.java:1950)
at com.rue21.inventory.support.EncryptDecrypt.main(EncryptDecrypt.java:103)

我希望目标文件被源文件覆盖

1 个答案:

答案 0 :(得分:1)

  1. ChannelSftp.rename 移动/重命名文件。它不会复制它。

  2. 您不能在现有文件上重命名/移动文件。您必须在重命名之前删除目标文件。