허락을 득하고 펌해야 하는 것 같아 내용을 펌하지 않고 링크를 모아 두었습니다.
첫 번째와 두 번째 포스트에 기본적인 설명과 예제가 모두 잘 정리가 되어 있어서 두 가지 포스트를 보고
빠진 내용은 API를 참조하시면서 바로 구현을 시작하시면 될 것 같습니다.
세 번째와 네 번째 포스트는 트러블슈팅 용으로 사용하시면 될 것 같네요.
FTP는 날짜를 보여주는 형식이 OS 종류마다 조금씩 달라서 파싱하는 데 신경을 많이 써야 합니다.
가령 아래와 같은 경우가 생기는 것이죠.(실제로 클라이언트 사이트에서 생겨난 문제입니다.)
3번째 파일의 날짜 부분이 형식이 완전히 다릅니다.
A/X(MFC)로는 데이터를 가져와서 직접 파싱해야 되는데 Commons Net으로는 네 번째 포스트 내용처럼 어렵지 않게 해결되는 것으로 보이네요.
public static void FTPTest() {
FTPClient ftp = null;
try {
ftp = new FTPClient();
ftp.setControlEncoding(”UTF-8″);
// 접속 및 로그인
ftp.connect(<IP_ADDRESS>, <PORT_NUM>);
if( !ftp.login(<UID>, <PWD>) ) {
System.err.println(”LOGIN FAILED!!!”);
ftp.disconnect();
return;
}
// 작업 디렉토리 변경
if( !ftp.changeWorkingDirectory(<DIRPATH>) ) {
System.err.println(”Can not change dir!!”);
ftp.logout();
ftp.disconnect();
return;
}
FTPFile [] fileList = ftp.listFiles();
// 파일 리스팅 & 다운로드 테스트
for( int i = 0 ; i < fileList.length ; i++ ) {
FTPFile file = fileList[i];
// FTP에서 넘어오는 파일 정보를 파싱하지 않고 그대로 봄
System.out.println(file.getRawListing());
if( file.isFile() ) {
// 다운로드 테스트
System.out.println(”FILE FOUND!! ABOUT TO DOWNLOAD…”);
FileOutputStream fos = null;
String filePath = “C:\\TEST_FTP\\” + ftp.printWorkingDirectory()
+ “\\” + file.getName();
try {
fos = new FileOutputStream(filePath);
if( !ftp.retrieveFile(file.getName(), fos) ) {
System.out.println(”DOWNLOAD FAILED!!”);
}
} catch(FileNotFoundException fnfe) {
System.err.println(”아웃풋 파일을 만들 수 없었습니다!! 경로명 : ” + filePath);
}
}
}
// 업로드 테스트
FileInputStream fis = null;
String filePath = <UPLOAD_FILE_PATH>;
try {
fis = new FileInputStream(filePath);
if( !ftp.storeFile(REMOTE_FILE_NAME, fis) ) {
System.out.println(”UPLOAD FAILED!!”);
}
} catch(FileNotFoundException fnfe) {
System.err.println(”인풋 파일을 만들 수 없었습니다!! 경로명 : ” + filePath);
}
ftp.logout();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (ftp != null && ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException e) {
}
}
}
}