首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSch sftp上传/下载进度

JSch sftp上传/下载进度
EN

Stack Overflow用户
提问于 2011-11-02 17:06:21
回答 1查看 19.4K关注 0票数 14

我是JSch和java的新手。我设法获得了一些代码,并以某种方式理解了它,但我被困在了一点上。下面的代码从SSH服务器下载文件,但是我需要显示文件复制百分比的进度指示器。HOw我能做到吗?我将非常感谢你的帮助。

代码语言:javascript
复制
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();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-02 17:56:00

com.jcraft.jsch.ChannelSftp中有一些方法可以用来传递回调函数。请看

代码语言:javascript
复制
void get(java.lang.String src, java.lang.String dst, SftpProgressMonitor monitor) 

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

当有一些字节被传输时,count(long)被周期性地调用,而当传输结束时,end()被调用。因此,SftpProgressMonitor的一个真正简单的实现可以是:

代码语言:javascript
复制
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()

代码语言:javascript
复制
sftpChannel.get(sourcePath, destPath, new SystemOutProgressMonitor());
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7977844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档