티스토리 뷰

java에서 sftp 전송을 할일이 생겨 확인해 보았습니다.

일단 sftp를 사용하기위한 library를 다운받아야 합니다.


download url : http://sourceforge.net/projects/jsch/files/jsch.jar/0.1.49/jsch-0.1.49.jar/download

SFTP 소스를 검색해보던중 아래의 하늘눈님의 블로그에 설명이 잘되어있어 참고해서 올렸습니다.

[출처] http://haneulnoon.tistory.com/55

소스에 오타가 있어 수정해서 올려봅니다 ( 주석은 그대로 남겨 올립니다 )


SFTPUtil.java

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.JSchException;

import com.jcraft.jsch.Session;

import com.jcraft.jsch.SftpException;


/**

 * 서버와 연결하여 파일을 업로드하고, 다운로드한다.

 *

 * @author haneulnoon

 * @since 2009-09-10

 *

 */

public class SFTPUtil{

    private Session session = null;


    private Channel channel = null;


    private ChannelSftp channelSftp = null;


    /**

     * 서버와 연결에 필요한 값들을 가져와 초기화 시킴

     *

     * @param host

     *            서버 주소

     * @param userName

     *            접속에 사용될 아이디

     * @param password

     *            비밀번호

     * @param port

     *            포트번호

     */

    public void init(String host, String userName, String password, int port) {

        JSch jsch = new JSch();

        try {

            session = jsch.getSession(userName, host, port);

            session.setPassword(password);


            java.util.Properties config = new java.util.Properties();

            config.put("StrictHostKeyChecking", "no");

            session.setConfig(config);

            session.connect();


            channel = session.openChannel("sftp");

            channel.connect();

        } catch (JSchException e) {

            e.printStackTrace();

        }


        channelSftp = (ChannelSftp) channel;


    }


    /**

     * 하나의 파일을 업로드 한다.

     *

     * @param dir

     *            저장시킬 주소(서버)

     * @param file

     *            저장할 파일

     */

    public void upload(String dir, File file) {


        FileInputStream in = null;

        try {

            in = new FileInputStream(file);

            channelSftp.cd(dir);

            channelSftp.put(in, file.getName());

        } catch (SftpException e) {

            e.printStackTrace();

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } finally {

            try {

                in.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }


    /**

     * 하나의 파일을 다운로드 한다.

     *

     * @param dir

     *            저장할 경로(서버)

     * @param downloadFileName

     *            다운로드할 파일

     * @param path

     *            저장될 공간

     */

    public void download(String dir, String downloadFileName, String path) {

        InputStream in = null;

        FileOutputStream out = null;

        try {

            channelSftp.cd(dir);

            in = channelSftp.get(downloadFileName);

        } catch (SftpException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }


        try {

            out = new FileOutputStream(new File(path));

            int i;


            while ((i = in.read()) != -1) {

                out.write(i);

            }

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } finally {

            try {

                out.close();

                in.close();

            } catch (IOException e) {

                e.printStackTrace();

            }


        }


    }


    /**

     * 서버와의 연결을 끊는다.

     */

    public void disconnection() {

        channelSftp.quit();


    }

}



SFTPServe.java

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

public class SFTPServe{

public static void main(String args[]) {


String host = "localhost";

int port = 22;

String userName = "rocksea";

String password = "1234";

String dir = "/home/teemo/tmp"; //접근할 폴더가 위치할 경로

String file = "/home/rocksea/SFTPUtil.java";


SFTPUtil util = new SFTPUtil();

util.init(host, userName, password, port);

util.upload(dir, new File(file));


String fileName="/home/teemo/tmp/teemo.txt"; //ex. "test.txt"

String saveDir="/home/rocksea/teemo.txt";//ex. "f:\\test3.txt"


util.download(dir, fileName, saveDir);


util.disconnection();

System.exit(0);


}

}



compile 및 실행

$ javac -cp jsch-0.1.49.jar SFTPUtil.java SFTPServe.java

$ java -cp .:jsch-0.1.49.jar SFTPServe


upload & download 를 확인해 볼 수 있습니다.

이상입니다.

.by rocksea



댓글