티스토리 뷰
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
이상입니다.
.by rocksea
'Developer' 카테고리의 다른 글
[VirtualBox] virtualbox ubuntu eth0 missing (eth0 인식 못하는 문제 해결방법) (0) | 2013.04.15 |
---|---|
Database Dump Backup 하기 (0) | 2013.04.12 |
[vim] plug-in management tool "vundle" (0) | 2013.04.02 |
Context initialization failed. ( tomcat 포팅시 error ) (0) | 2013.02.28 |
maven + jboss plugin 설치 및 배포 (0) | 2013.02.18 |
- Total
- Today
- Yesterday
- hadoop
- AWS
- NGINX
- 비교구문
- hdfs
- 비지니스 영어
- 해외여행
- 대명사 구문
- ubuntu
- memcached
- 다낭
- Business English
- 가정법
- 베트남
- Python
- JBOSS
- redis
- 영문법
- PostgreSQL
- k8s
- 스페인 여행
- 도덕경
- maven
- 조동사
- 여행
- nodejs
- Python Django
- mongoDB
- it
- 영작
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |