JSch sftp上传/下载进度

我是JSch和java的新手。 我设法得到一些代码并以某种方式理解它,但我坚持一点。 以下代码从SSH服务器下载文件,但我需要显示复制文件百分比的进度表。 我该怎么做。 我将非常感谢你的帮助。

import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpProgressMonitor; public class SFTPExample { public static void main(String args[]) throws Exception { String user = "root"; String password = "password"; String host = "192.168.0.5"; int port = 22; String knownHostsFilename = "/home/world/.ssh/known_hosts"; String sourcePath = "/media/nfs/genotype.txt"; String destPath = "genotype.txt"; JSch jsch = new JSch(); jsch.setKnownHosts(knownHostsFilename); Session session = jsch.getSession(user, host, port); session.setPassword(password); session.connect(); ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp"); sftpChannel.connect(); System.out.println("Downloading test file"); sftpChannel.get(sourcePath, destPath); sftpChannel.exit(); session.disconnect(); } } 

com.jcraft.jsch.ChannelSftp中有用于传递回调的方法。 看着那(这

 void get(java.lang.String src, java.lang.String dst, SftpProgressMonitor monitor) 

方法和com.jcraft.jsch.SftpProgressMonitor接口。 在这个示例代码的底部(它有点乱),你会发现SftpProgressMonitor的一个实现,它使用它的回调方法count(long)end()来操作javax.swing.ProgressMonitor 。

当传输了一些字节时,会定期调用count(long) ,并在传输结束时调用end() 。 所以SftpProgressMonitor的一个非常简单的imeplementation可能是:

 public class SystemOutProgressMonitor implements SftpProgressMonitor { public SystemOutProgressMonitor() {;} public void init(int op, java.lang.String src, java.lang.String dest, long max) { System.out.println("STARTING: " + op + " " + src + " -> " + dest + " total: " + max); } public boolean count(long bytes) { for(int x=0; x < bytes; x++) { System.out.print("#"); } return(true); } public void end() { System.out.println("\nFINISHED!"); } } 

然后我创建一个实例并将其传递给get()

 sftpChannel.get(sourcePath, destPath, new SystemOutProgressMonitor());