2011-11-02 15 views
11

JSch ve java konusunda yeni. Bazı kodlar almayı başardım ve bir şekilde anladım, ama bir noktada sıkışıp kaldım. Aşağıdaki kod, SSH sunucusundan dosya indirir, ancak kopyalanan dosyanın yüzdesini gösteren ilerleme sayacına ihtiyacım var. Nasıl yapabilirim. Yardımın için minnettar olacağım.JSch sftp yukleme/indirme ilerliyor

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

cevap

17

Bir geri arama geçmek için kullanmak com.jcraft.jsch.ChannelSftp yılında yöntemler var.

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

yöntem ve com.jcraft.jsch.SftpProgressMonitor arayüzünde bak. Bu Example Code (bu tür dağınık) alt kısmında, bir javax.swing.ProgressMonitor işlemek için geri arama yöntemleri count(long) ve end() kullanan SftpProgressMonitor bir uygulama bulacaksınız. Aktarılan bazı baytlar olduğunda ve aktarım bittiğinde end()'un çağrılması durumunda düzenli aralıklarla çağrılar . Yani SftpProgressMonitor gerçekten basit imeplementation olabilir: Ben dosyayı indirirken am mı

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!"); 
    } 
} 

Sonra .. bunun bir örneğini oluşturmak ve cevap fo get()

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

thanx onu geçerdi O anda 100MB değerindeki bayt değeri: 32755 gibi ,, bu yüzden neden bu değeri aldığımı açıklar mısın .. – NovusMobile

+0

Verilen toplam değeri, verilen değeri biriktirerek alabilirsiniz. – ymnk

+0

Bağlantı artık çalışmıyor görünüyor – Hiran

İlgili konular