2012-10-09 21 views

回答

3

Apache FTPClient目前不支持SFTP。但是,您可以使用JSch - Java Secure Channel。

Onkar Joshi更詳細地介紹了用於在Java中進行FTP,SFTP,FTPS文件傳輸的庫。

使用JSch與SFTP傳輸文件的例子如下:

... 

private static final Logger logger = Logger.getLogger(YourClass.class.getName()); 

public boolean sendDataViaSFTP(String contents) throws Exception { 
    String hostname = "<FTP hostname/IP>"; 
    String username = "<FTP username>"; 
    String password = "<FTP password>"; 
    String remoteDirectory = "<FTP remote directory>"; 
    int ftpPort = 22; 

    logger.info("*** Creating FTP session. ***"); 
    JSch jsch = new JSch(); 
    Session session = null; 
    Channel channel = null; 
    ChannelSftp c = null; 

    //Now connect and SFTP to the SFTP Server 
    try { 
     //Create a session sending through our username and password 
     session = jsch.getSession(username, hostname, ftpPort); 
     logger.info("*** FTP Session created. ***"); 
     session.setPassword(password); 

     //Security.addProvider(new com.sun.crypto.provider.SunJCE()); 
     //Setup Strict HostKeyChecking to no so we dont get the 
     //unknown host key exception 
     Properties config = new Properties(); 
     config.put("StrictHostKeyChecking", "no"); 
     session.setConfig(config); 
     session.connect(); 
     logger.info("*** Session connected. ***"); 

     //Open the SFTP channel 
     logger.info("*** Opening FTP Channel. ***"); 
     channel = session.openChannel("sftp"); 
     channel.connect(); 
     c = (ChannelSftp) channel; 

     //Change to the remote directory 
     logger.info("*** Changing to FTP remote dir: " + remoteDirectory + " ***"); 
     c.cd(remoteDirectory); 

     //Send the file we generated 
     try { 
      String filename = "myfile.txt"; 

      logger.info("*** Storing file as remote filename: " + filename + " ***"); 

      ByteArrayInputStream bis = new ByteArrayInputStream(contents.getBytes()); 
      c.put(bis, filename); 
      return true; 
     } catch (Exception e) { 
      logger.info("*** Storing remote file failed. " + e.toString() + " ***"); 
      throw e; 
     } 
    } catch (Exception e) { 
     logger.info("*** Unable to connect to FTP server. " + e.toString() + " ***"); 
     throw e; 
    } finally { 
     // 
     //Disconnect from the FTP server 
     // 
     try { 
      if(session != null) 
       session.disconnect(); 

      if(channel != null) 
       channel.disconnect(); 

      if(c != null) 
       c.quit(); 
     } catch (Exception exc) { 
      logger.severe("*** Unable to disconnect from FTP server. " + exc.toString()+" ***"); 
     } 

     logger.info("*** SFTP Process Complete. ***"); 
    } 

} 

... 
+0

也有一個很好的理由。 SFTP與FTP完全不同。它幾乎是一個'Java不是Javascript'的交易:) – Gimby

+2

生成FTPClient的Apache Commons Net項目不過支持SFTP。 – BrianC