2013-02-12 5 views
12

SFTP를 통해 파일을 전송하는 방법은 무엇입니까? 나는 SFTP 클라이언트에 대한 샘플 코드를 원한다. 내 응용 프로그램에 SFTP 서버를 포함시키고 싶을 때 클라이언트가 내 응용 프로그램에 파일을 보낼 수 있어야합니다.Java에서 SFTP를 통해 파일을 전송하는 방법은 무엇입니까?

PS : SFTP 클라이언트에 대한 질문입니다. 그리고이 질문은 다른 두 가지 질문의 중복이 아닙니다.

답변

46

이 코드를 사용해보십시오.

public void send (String fileName) { 
     String SFTPHOST = "host:IP"; 
     int SFTPPORT = 22; 
     String SFTPUSER = "username"; 
     String SFTPPASS = "password"; 
     String SFTPWORKINGDIR = "file/to/transfer"; 

     Session session = null; 
     Channel channel = null; 
     ChannelSftp channelSftp = null; 
     System.out.println("preparing the host information for sftp."); 
     try { 
      JSch jsch = new JSch(); 
      session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT); 
      session.setPassword(SFTPPASS); 
      java.util.Properties config = new java.util.Properties(); 
      config.put("StrictHostKeyChecking", "no"); 
      session.setConfig(config); 
      session.connect(); 
      System.out.println("Host connected."); 
      channel = session.openChannel("sftp"); 
      channel.connect(); 
      System.out.println("sftp channel opened and connected."); 
      channelSftp = (ChannelSftp) channel; 
      channelSftp.cd(SFTPWORKINGDIR); 
      File f = new File(fileName); 
      channelSftp.put(new FileInputStream(f), f.getName()); 
      log.info("File transfered successfully to host."); 
     } catch (Exception ex) { 
      System.out.println("Exception found while tranfer the response."); 
     } 
     finally{ 

      channelSftp.exit(); 
      System.out.println("sftp Channel exited."); 
      channel.disconnect(); 
      System.out.println("Channel disconnected."); 
      session.disconnect(); 
      System.out.println("Host Session disconnected."); 
     } 
    } 
+0

내 대상 디렉토리에 sudo 권한이 필요합니다. 어떻게해야합니까? @Dhinakar – Ajak6

+0

작업 디렉토리를 모른다면? 파일 경로 만 알지? 다음 cd 명령을 처리하는 방법? –

+0

@ Ajak6 sudo 권한이있는 솔루션을 찾으셨습니까? – Dish