소스영역 :::
/**
* 참조 사이트 목록
*
http://www.okjsp.pe.kr/seq/51685 *
http://benelog.springnote.com/pages/1468338 * 참조해서 작업 해 본것임.
* apache 의 common.net api 사용
* ftp batch 작업을 위한 용도
* 2009.03.26
* 인자 : -H:server ip, -P:server port, -UI:user id, -UP:user pw, -PM:passive-mode
*/
package net.nchannel.ftp;
/**
* @author snipper
*
*/
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
//import org.apache.commons.net.ftp.FTPListParseEngine;
//import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
public class FCBatch {
// protected static final Log logger = LogFactory.getLog(FCBatch.class);
/**
*
*/
public FCBatch() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 인자는 -H, -P, -ui, -up, -path, -pm 이 존재
String host = "";
String port = "";
String id = "";
String pw = "";
String rpath = "";
String pm = "";
String fileNm = ""; //"JeusServer_"+getDate(-1)+".log"; //현재 이전 날짜의 파일 가져오기 위한 파일명 구하기
String lpath = ""; //"d:\\jeuslogs\\JeusServer_"+getDate(-1)+".log"; //현재 이전 날짜의 파일 가져오기 위한 파일명 구하기
FileOutputStream fos = null;
// System.out.println("입력 인자 수 : " + args.length);
// System.out.println("파일 명 : " + fileNm);
// 입력된 인자 값을 각 의미 변수에 할당.
for(int i=0; i < args.length; i++) {
if(args[i].indexOf("-H")!=-1)
host = args[i].substring(2);
if(args[i].indexOf("-P")!=-1)
port = args[i].substring(2);
if(args[i].indexOf("-UI")!=-1)
id = args[i].substring(3);
if(args[i].indexOf("-UP")!=-1)
pw = args[i].substring(3);
if(args[i].indexOf("-RP")!=-1)
rpath = args[i].substring(3);
if(args[i].indexOf("-LP")!=-1)
lpath = args[i].substring(3);
if(args[i].indexOf("-FN")!=-1)
fileNm = args[i].substring(3);
if(args[i].indexOf("-PM")!=-1)
pm = args[i].substring(3);
}
if(port.equals("")) port = "21"; //접속 포트 번호, 기본 21번 포트 사용
if(rpath.equals("")) rpath = "/home/tmax/jeus5/logs/ECOWEB/"; //원격 기본 디렉토리 설정, 제우스를 기본으로 했음.
if(lpath.equals("")) lpath = "c:\\jeuslogs\\"; //로컬 기본 디렉토리 설정, 로컬 디렉토리가 없을 경우.... 현재 폴더로 해도 되나 그냥 위와 같이 함.
if(fileNm.equals("")) fileNm = "JeusServer_"+getDate(-1)+".log"; //가져올 기본 파일명 설정
if(pm.equals("")) pm = "Y"; // 패시브모드 on(기본모드)
// System.out.println("host = " + host);
// System.out.println("port = " + port);
// System.out.println("id = " + id);
// System.out.println("pw = " + pw);
// System.out.println("remote path = " + rpath);
// System.out.println("local path = " + lpath);
// System.out.println("file name = " + fileNm);
// System.out.println("passive mode y/n = " + pm);
FTPClient ftp = null;
try {
ftp = new FTPClient();
ftp.setControlEncoding("euc-kr"); // ftp 인코딩을 EUC-KR 로 설정.
// if(logger.isDebugEnabled()) {
System.out.println("FTP Client Test Progrma with Commons NET");
System.out.println("test by 2009.03.26");
System.out.println("FCBatch main() start");
// System.out.println("host = " + host);
// System.out.println("port = " + port);
// System.out.println("id = " + id);
// System.out.println("pw = " + pw);
// System.out.println("remote path = " + rpath);
// System.out.println("passive mode y/n = " + pm);
// }
//
if(!host.equals("") && !port.equals("") && !id.equals("") && !pw.equals("")) {
// ftp 연결
ftp.connect(host,Integer.parseInt(port));
// if(logger.isDebugEnabled()) {
System.out.println("connected to " + host +":"+port);
// }
// if(logger.isDebugEnabled()) {
System.out.println("login by user id : " + id +", password :"+pw);
System.out.println("
ftp.login()");
// }
ftp.login(id, pw);
// if(logger.isDebugEnabled()) {
System.out.println("login success...");
// }
// 패시브 모드 설정 하기
if(pm.endsWith("Y")) {
// if(logger.isDebugEnabled()){
System.out.println("passive mode 설정");
System.out.println("passive mode 입력 값: " +pm);
// }
ftp.enterLocalPassiveMode();
// if(logger.isDebugEnabled()){
System.out.println("passive mode 설정 완료");
// }
}
//change directory
// if(logger.isDebugEnabled()) {
System.out.println("change directory : " + rpath );
System.out.println("
ftp.changeWorkingDirectory("+rpath+")");
// }
ftp.changeWorkingDirectory(rpath);
// if(logger.isDebugEnabled()) {
System.out.println("경로 변경 : " + rpath);
// }
// if(logger.isDebugEnabled()) {
System.out.println("파일 전송 타입 설정 : setFileType" );
System.out.println("
ftp.setFileType(FTP.BINARY_FILE_TYPE)");
// }
ftp.setFileType(FTP.BINARY_FILE_TYPE);
// if(logger.isDebugEnabled()) {
System.out.println("파일 전송 타입 설정 완료 " );
// }
// ftp 사이트 리스팅.
// ftpList(ftp, path);
/*
try{
// if(logger.isDebugEnabled()) {
System.out.println("서버 디렉토리 리스팅 : " );
System.out.println("
ftp.setFileType(FTP.BINARY_FILE_TYPE)");
// }
FTPListParseEngine engine =
ftp.initiateListParsing("unix",path);
System.out.println("" + StringUtils.rightPad("Name", 30) + StringUtils.leftPad("Size", 10) + " ");
System.out.println("" + StringUtils.leftPad("-", 30, "-") + StringUtils.leftPad("-", 10,"-") + "-");
int idx=0;
while(engine.hasNext()) {
FTPFile[] files = engine.getNext(25);
idx += files.length;
for(int i=0; i < files.length; i++) {
FTPFile file= files[i];
System.out.println(StringUtils.rightPad(" "+file.getName(),30) + StringUtils.leftPad(""+file.getSize(), 10) + " ");
}
}
System.out.println("-" + StringUtils.leftPad("-", 30, "-") + StringUtils.leftPad("-", 10, "-") + "-");
System.out.println(" total : " + idx);
System.out.println(" ");
// if(logger.isDebugEnabled()) {
System.out.println("서버 디렉토리 리스팅 : " + path + "완료" );
// }
} catch (Exception e) {
System.out.println("ftp 리스팅 실패");
e.printStackTrace();
System.exit(-1);
}
*/
// 파일 내려 받기 ??
try {
fos = new FileOutputStream(lpath+fileNm);
ftp.retrieveFile(fileNm, fos);
} catch(IOException e) {
System.out.println("IO Exception : " + e.getMessage());
} finally {
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
System.out.println("IO Exception : " + e.getMessage());
}
}
}
System.out.println(fileNm + "파일 다운로드 완료 !!!");
} else { // host, port, id, pw 없으면 에러 발생.
System.out.println("usage : FCBatch -Hhost -P[port] -UIid -UPpw -RP[remote path] -LP[local path] -FN[file name] -PM[passive mode] ");
System.out.println("options ");
System.out.println("-H : Host [Name | IP] ");
System.out.println("-P : 접속할 포트 번호 , Default : 21 ");
System.out.println("-UI : User ID ");
System.out.println("-UP : User Password");
System.out.println("-RP : FTP Server Path, Default : /home/tmax/jeus5/logs/ECOWEB/");
System.out.println("-LP : Localhost Path, Default : c:\\jeuslogs\\");
System.out.println("-FN : Download 할 File Name , Default : JeusServer_"+getDate(-1)+".log ");
System.out.println("-PM : Passive Mode 사용 여부 [Y/N], Default: Y ");
// throw new Exception("접속에 필요한 필수 정보를 입력하지 않으셨습니다.");
}
} catch (Exception e) {
// System.out.println("ftp 로그인 실패");
e.printStackTrace();
} finally {
// ftp 연결 해제.
// System.out.println("ftp 연결해제");
if(ftp != null &&
ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException e) {
System.out.println("IOException : " + e.getMessage());
}
}
// 프로그램 종료
System.exit(-1); // 종료
}
}
/*
public static void ftpList(FTPClient ftp, String path) {
try{
if(logger.isDebugEnabled()) {
System.out.println("서버 디렉토리 리스팅 : " );
System.out.println("
ftp.setFileType(FTP.BINARY_FILE_TYPE)");
}
FTPListParseEngine engine =
ftp.initiateListParsing("unix",path);
System.out.println("" + StringUtils.rightPad("Name", 30) + StringUtils.leftPad("Size", 10) + " ");
System.out.println("" + StringUtils.leftPad("-", 30, "-") + StringUtils.leftPad("-", 10,"-") + "-");
int idx=0;
while(engine.hasNext()) {
FTPFile[] files = engine.getNext(25);
idx += files.length;
for(int i=0; i < files.length; i++) {
FTPFile file= files[i];
System.out.println(StringUtils.rightPad(" "+file.getName(),30) + StringUtils.leftPad(""+file.getSize(), 10) + " ");
}
}
System.out.println("-" + StringUtils.leftPad("-", 30, "-") + StringUtils.leftPad("-", 10, "-") + "-");
System.out.println(" total : " + idx);
System.out.println();
if(logger.isDebugEnabled()) {
System.out.println("서버 디렉토리 리스팅 : " + path + "완료" );
}
} catch (Exception e) {
System.out.println("ftp 리스팅 실패");
e.printStackTrace();
System.exit(-1);
}
}
*/
/**
*
* @param day
* @return
*/
public static String getDate(int day){
Calendar temp = Calendar.getInstance();
StringBuffer sDate = new StringBuffer();
temp.add(Calendar.DAY_OF_MONTH, -1);
int iYY = temp.get(Calendar.YEAR);
int iMM = temp.get(Calendar.MONTH)+1;
int iDD = temp.get(Calendar.DAY_OF_MONTH);
sDate.append(iYY);
if(iMM <10)
sDate.append("0");
sDate.append(iMM);
if(iDD < 10)
sDate.append("0");
sDate.append(iDD);
return sDate.toString();
}
}