2011-11-02 11 views
11

मैं जेएसएच और जावा के लिए नया हूं। मैं कुछ कोड प्राप्त करने में कामयाब रहा और इसे किसी भी तरह समझ गया, लेकिन मैं एक बिंदु पर फंस गया हूं। निम्नलिखित कोड एसएसएच सर्वर से फ़ाइल डाउनलोड करता है, लेकिन मुझे प्रगति मीटर की आवश्यकता है जो प्रतिलिपि बनाई गई फ़ाइल का प्रतिशत दिखाती है। मैं यह कैसे कर सकता हूं। मैं आपकी मदद की बहुत सराहना करता हूं।जेएसएच एसएफटीपी अपलोड/डाउनलोड प्रगति

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

उत्तर

17

com.jcraft.jsch.ChannelSftp में विधियां हैं जिन्हें आप कॉलबैक में पास करने के लिए उपयोग करते हैं।

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

विधियों और com.jcraft.jsch.SftpProgressMonitor इंटरफ़ेस को देखें। इस Example Code (यह एक प्रकार का गन्दा) के नीचे, आपको SftpProgressMonitor का कार्यान्वयन मिलेगा जो javax.swing.ProgressMonitor में हेरफेर करने के लिए इसकी कॉलबैक विधियों count(long) और end() का उपयोग करता है।

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()); 
+2

thanx यह जवाब के लिए दे देते हैं .. उस समय 100 एमबी मेरे बाइट्स मान है: 32755 जैसे, तो क्या आप मुझे समझाएंगे कि मुझे यह मूल्य क्यों मिल रहा है .. – NovusMobile

+0

आप दिए गए मान को संचयी करके कुल स्थानांतरित डेटा का आकार प्राप्त कर सकते हैं। – ymnk

+0

लिंक अब और काम नहीं कर रहा है – Hiran

संबंधित मुद्दे