2013-07-04 100 views
13

我想上传两个文件到使用JSch的SFTP服务器。如果目录是空的,它可以很好地上传文件,但我想一遍又一遍地上传相同的文件(只需更改内部的ID),但我无法弄清楚如何执行此操作。 JSch中有一些名为OVERWRITE的静态参数,但我无法找到如何使用它。Java使用JSch上传SFTP,但如何覆盖当前文件?

任何关心向我展示如何添加此设置?

这是我当前的代码:

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

回答

17

我从来没有使用JSch但是从它的外观有一些重载put方法,其中一个您的当前签名与又多了一个“模式匹配“参数,似乎是在ChannelSftp类三个静态模式下的参数(覆盖= 0,RESUME = 1,APPEND = 2),所以你应该能够使用:

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