2010-02-27 17 views
11

मैं एसएफटीपी फाइल ट्रांसफर के लिए उपयोग करने के लिए एक मृत सरल जावा लाइब्रेरी की तलाश में हूं। मुझे उससे परे किसी भी अन्य सुविधाओं की आवश्यकता नहीं है।जावा एसएफटीपी ट्रांसफर लाइब्रेरी

मैंने जेहॉन की कोशिश की है, लेकिन यह अविश्वसनीय नागी है, और मुझे लगता है कि 8 जार फाइलें इतनी कम कार्यक्षमता के लिए थोड़ा पागल है जितनी मुझे चाहिए।

और पुस्तकालय को मुक्त होना चाहिए (मुफ्त बियर में), और बेहतर ओपन सोर्स (आवश्यकता नहीं)।

धन्यवाद।

+0

एक एसएस सुरंग पर ftp? –

+2

http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol –

+1

यदि आप इसका मतलब है तो कृपया "एसएफटीपी" शब्द का उपयोग करें। एफ़टीपी, एसएफटीपी/एसएसएच, एफटीपीएस, और एसएसएच पर नियमित रूप से एफ़टीपी सुरंग के बीच, शब्दकोष संदिग्ध हो जाते हैं। – prestomation

उत्तर

27

संपादित करें: मैं अपने पिछले जवाब रखने के लिए, के रूप में JSch अभी भी कई स्थानों में प्रयोग किया जाता है जा रहा हूँ, लेकिन अगर आप एक बेहतर से प्रलेखित पुस्तकालय की जरूरत है, तो आप sshj उपयोग कर सकते हैं। यह कैसे उपयोग करने के लिए SFTP करने के लिए एक उदाहरण है:

Session session = null; 
Channel channel = null; 
try { 
    JSch ssh = new JSch(); 
    ssh.setKnownHosts("/path/of/known_hosts/file"); 
    session = ssh.getSession("username", "host", 22); 
    session.setPassword("password"); 
    session.connect(); 
    channel = session.openChannel("sftp"); 
    channel.connect(); 
    ChannelSftp sftp = (ChannelSftp) channel; 
    sftp.put("/path/of/local/file", "/path/of/ftp/file"); 
} catch (JSchException e) { 
    e.printStackTrace(); 
} catch (SftpException e) { 
    e.printStackTrace(); 
} finally { 
    if (channel != null) { 
     channel.disconnect(); 
    } 
    if (session != null) { 
     session.disconnect(); 
    } 
} 
:

SSHClient ssh = new SSHClient(); 
ssh.loadKnownHosts(); 
ssh.connect("host"); 
try { 
    ssh.authPassword("username", "password"); 
    SFTPClient sftp = ssh.newSFTPClient(); 
    try { 
     sftp.put(new FileSystemFile("/path/of/local/file"), "/path/of/ftp/file"); 
    } finally { 
     sftp.close(); 
    } 
} finally { 
    ssh.disconnect(); 
} 

JSch (एक जावा ssh lib, उदाहरण के लिए चींटी द्वारा प्रयुक्त) का उपयोग करना, आप ऐसा कुछ कर सकते हैं

एसएसटीपी करने के लिए जेएसएच का उपयोग कर another link है।

आप सीधे इस तरह से जेएसच का उपयोग कर सकते हैं, या Commons VFS के माध्यम से, लेकिन फिर आपको कॉमन्स vfs jar और jsch jar दोनों को रखना होगा।

+0

मुझे ऐसा करने का एक आसान तरीका मिला, मैं अपना जवाब संपादित करूंगा। –

+1

जेएसएच एक महान पुस्तकालय है लेकिन दस्तावेज़ीकरण में गंभीर रूप से कमी है। मैंने पाया http://timarcher.com/node/57 वास्तव में एक उपयोगी उदाहरण था। – UmYeah

+0

लिंक के लिए धन्यवाद, मैं इसे उत्तर में जोड़ दूंगा। दरअसल, जेएसएच में वास्तव में दस्तावेज की कमी है (और स्रोत कोड पठनीयता, ऐसा लगता है जैसे उन्होंने इसे जंगली में छोड़ दिया), लेकिन यह पूरी तरह से काम करता है। –

-2

अपाचे कॉमन्स से FTPSClient कैसे?

+13

के लिए पाठ संपादित किया है जो आप सुझाव दे रहे हैं वह एफटीपीएस है, एसएफटीपी नहीं। –

6

एसएसएच कुंजी जांच के बारे में चिंता किए बिना JSch का उपयोग कर उदाहरण का पूरा स्रोत कोड यहां दिया गया है।

import com.jcraft.jsch.*; 

public class TestJSch { 
    public static void main(String args[]) { 
     JSch jsch = new JSch(); 
     Session session = null; 
     try { 
      session = jsch.getSession("username", "127.0.0.1", 22); 
      session.setConfig("StrictHostKeyChecking", "no"); 
      session.setPassword("password"); 
      session.connect(); 

      Channel channel = session.openChannel("sftp"); 
      channel.connect(); 
      ChannelSftp sftpChannel = (ChannelSftp) channel; 
      sftpChannel.get("remotefile.txt", "localfile.txt"); 
      sftpChannel.exit(); 
      session.disconnect(); 
     } catch (JSchException e) { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } catch (SftpException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+3

उत्तर में जोड़ा है यह उत्तर चिंता नहीं करता है सुरक्षा के बारे में, कुंजी जांच के बारे में नहीं। 'StrictHostKeyChecking = no' का उपयोग करके आप कोई सुरक्षा खो देते हैं। परिणामों को बताने के बिना किसी का भी उपयोग करने की सलाह न दें। –

3

निकास() और डिस्कनेक्ट() को आखिरकार ब्लॉक में रखा जाना चाहिए। इस उदाहरण में हमें अपवाद के मामले में कभी खत्म नहीं हुआ प्रोग्राम मिला है क्योंकि दूसरा थ्रेड समाप्त नहीं होगा।

+0

यह वास्तव में एक उत्तर नहीं है, लेकिन ऊपर @Iraklis 'उत्तर पर एक उपयोगी टिप्पणी है। – hotshot309

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