출처 : http://blog.naver.com/lover4908?Redirect=Log&logNo=110072552163
필요한 라이브러리
- import java.io.BufferedInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import org.apache.commons.net.ftp.FTP;
- import org.apache.commons.net.ftp.FTPClient;
- import org.apache.commons.net.ftp.FTPReply;
- FTPClient client = null;
- BufferedInputStream bis = null;
- try {
- client = new FTPClient();
- /*
- FTPClientConfig config = new FTPClientConfig();
- config.setServerLanguageCode("ko");
- config.setDefaultDateFormatStr("MM월 d일 HH:mm");
- config.setRecentDateFormatStr("MM웡 d일 HH:mm");
- client.configure(config);
- */
- client.setControlEncoding("euc-kr");
- int resultCode = client.getReplyCode();
- if(FTPReply.isPositiveCompletion(resultCode) == false){
- }
- else {
- client.setSoTimeout(5000);
- boolean isLogin = client.login(id, pwd);
- if(isLogin == false) {
- }
- client.setFileType(FTP.BINARY_FILE_TYPE);
- String savaLoc = "";
- for(int i =0 ; i<locArr.length ; i++) {
- savaLoc = savaLoc + locArr[i] + "/";
- client.makeDirectory(savaLoc);
- }
- boolean isSuc = client.storeFile(savaLoc+file.getName(), bis);
- //System.out.println("파일 전송 성공여부 : "+isSuc);
- if(isSuc == false) {
- }
- /*
- FTPFile[] list = client.listFiles();
- for(int i=0 ; i<list.length ; i++) {
- try{
- System.out.println(list[i].toString());
- }catch (Exception e) {
- }
- }
- */
- client.logout();
- }
- e.printStackTrace();
- throw e;
- }
- finally {
- if(bis != null) {
- }
- if(client != null && client.isConnected()) {
- }
- }
- }
- }
simpleSendFileToFTP(String targetUrl , String id , String pwd , String port , String realSaveLocation , File file) 메소드 원형이 다음과 같습니다.
targetUrl <-- FTP 주소
id <-- 사용자 아이디
pwd <-- 사용자 패스워드
port <-- FTP 포트입니다. 일반적으로 21을 사용할겁니다??
realSaveLocation <-- FTP 서버에 저장되어야 할 경로입니다.
file <-- 업로드할 로컬파일의 경로입니다. 파일객체조
사용하실때는 예를 들어서
Util.simpleSendFileToFTP("127.0.0.1" , "User" , "Password" , "21" , "/doc/data/2009/10" , new File("c:/data/01/test.xls"))
이런식으로 사용하시면 됩니다.
혹시 실제 FTP의 저장될 경로의 폴더가 모두 존재하지 않을경우에 자동으로 생성하게 했습니다.
API중에 makeDirectory() 이녀석이 폴더를 생성하게 해주는데요. 상위폴더가 없으면 생성을 못하더군요. 그래서 문자열 / 을 구분자로 짤라서 상위부터 하나씩 생성하게 했습니다.
어렵고 복잡한게 싫어서 최대한 간단하게 개발하려고 해서 이런저런 설정하는 부분들은 다 빼버리고 했는데 , 저의 경우는 잘 동작하는군요.
혹시 FTP에 접속해서 파일 리스트를 받으려고 하시는 분중에 접속 및 로그인 다되는데 파일리스트만 가져오지를 못하는 경우가 있습니다.
이는 파일리스트 가져온 결과값에 한글이 포함되어 있으면 , 아파치 NET이 이 한글을 파싱하는 과정에서 오류가 발생해서 리스트를 가져오지 못합니다. 이 부분을 해결할려면 제가 주석으로 막아놓은 부분을 적용해보시기 바립니다.
/*
FTPClientConfig config = new FTPClientConfig();
config.setServerLanguageCode("ko");
config.setDefaultDateFormatStr("MM월 d일 HH:mm");
config.setRecentDateFormatStr("MM웡 d일 HH:mm");
client.configure(config);
*/
이 부분입니다.
/*
FTPFile[] list = client.listFiles();
for(int i=0 ; i<list.length ; i++) {
try{
System.out.println(list[i].toString());
}catch (Exception e) {
}
}
*/
이 부분은 리스트 테스트 하는 부분이구요.
사실 위에 부분은 파일 업로드하는 것하고 밀접한 관계는 없으나 , 저처럼 접속잘되고 로그인 잘되고 업로드 다운로드 다 잘되는데 , 리스트를 가져오기 못하는 굉장히 당혹스러움을 경험해 무한삽질에 빠지는데 도움이 될까하여 남겼습니다.
파일 다운로드 처럼 , 위에것을 사용하려면 jar 파일 2개가 필요합니다. 업로드 할테니 다운받으세요.
최신것을 받으시려면 아파치 사이트 들어가서 받으셔요.
여기로 들어가시면 됩니다.
'Programming > JAVA' 카테고리의 다른 글
[NIO] JAVA NIO의 ByteBuffer와 Channel로 File Handling에서 더 좋은 Perfermance 내기! (0) | 2014.01.21 |
---|---|
IO vs NIO performance compare (성능 비교) (0) | 2014.01.21 |
이클립스에서 Ctrl + Space가 동작하지 않을 때 (0) | 2014.01.09 |
[JAVA Spring]강의 (0) | 2013.12.26 |
SPRING TOOL SUITE 설치하기 (0) | 2013.12.19 |