이 포스트에서는 java에서 sftp에 연결해 파일을 업로드, 다운로드, 삭제하는 방법을 설명해보도록 하겠다.
http://www.jcraft.com/jsch/
jsch-0.1.42.jar 받기
package util;
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.craft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
/**
* 서버와 연결하여 파일을 업로드하고, 다운로드한다.
*
* @author
* @since
*
*/
public class sftpUtil{
private Session session = null;
private Channel channel = null;
private ChannelSftp channelSftp = null;
/**
* 서버와 연결하여 파일을 업로드하고, 다운로드한다.
*
* @author
* @since
*
*/
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"); //접속 시 hostkeychecking 여부
session.setConfig(config);
session.connect();
//sftp 접속
channel = sessjion.openChannel("sftp");
channel.connect();
}catch(JSchException e){
e.printStackTrace();
}
channelSftp = (ChannelSftp) channel; //channelSftp 초기화
}
/**
* 서버와 연결하여 파일을 업로드하고, 다운로드한다.
*
* @author
* @since
*
*/
public void upload(String dir, File file){
FileInputStream in = null;
try{
//FileInputStream 파일로부터 바이트로 입력받아 바이트 단위로 출력하는 클래스
// channelSftp.put의 첫번째 인자의 형태
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){
e.printStackTrace();
}
try{
out = new FileOutputStream(new File(path));
int i;
while((i=in.read())!= -1){
out.write(i);
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
out.close();
in.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
/**
* 서버와의 연결을 끊는다.
*/
public void disconnection() {
channelSftp.quit();
}
}
public static void main(String args[]){
String host = "sftp주소";
int port = 포트번호;
String userName = "아이디";
String password = "비밀번호";
String dir = "/폴더명/"; // 접근할 폴더가 위치할 경로
String file = "f:\\test.txt(업로드시킬 파일)";
UsigFTP util = new sftpUtil();
util.init(host, userName, password, port);
util.upload(dir, new File(file));
String fileName = "다운로드 받을 파일명"; // ex) test.txt
String saveDir = "저장할 위치" // ex) f:\\test3.txt
util.download(dir, fileName, saveDir);
util.disconnection();
System.exit(0);
}