Notice
Recent Posts
Recent Comments
Link
투케이2K
133. (TWOK/UTIL) [Android/Java] C_FTP_Client_Module : FTP 클라이언트 유틸 파일 본문
투케이2K 유틸파일
133. (TWOK/UTIL) [Android/Java] C_FTP_Client_Module : FTP 클라이언트 유틸 파일
투케이2K 2024. 10. 2. 20:30[설 명]
프로그램 : Android / Java
설 명 : C_FTP_Client_Module : FTP 클라이언트 유틸 파일
[소스 코드]
package com.example.javaproject.C_Module;
import android.content.Context;
import com.example.javaproject.C_Util;
import com.example.javaproject.S_Log;
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.FTPReply;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Arrays;
import java.util.Properties;
public class C_FTP_Client_Module {
/**
* // --------------------------------------------------------------------------------------
* TODO [클래스 설명]
* // --------------------------------------------------------------------------------------
* 1. FTP 파일 전송 클라이언트 클래스
* // --------------------------------------------------------------------------------------
* 2. 필요 라이브러리 :
*
* // TODO [FTP 통신 jar 파일]
* implementation files('libs/commons-net-3.11.1.jar')
* // --------------------------------------------------------------------------------------
* 3. jar 라이브러리 다운로드 참고 사이트 :
*
* https://commons.apache.org/proper/commons-net/download_net.cgi
*
* TODO https://central.sonatype.com/artifact/commons-net/commons-net/3.6/versions
*
* TODO https://repo1.maven.org/maven2/commons-net/commons-net/3.6/
* // --------------------------------------------------------------------------------------
* */
/**
* // --------------------------------------------------------------------------------------
* TODO [빠른 로직 찾기 : 주석 로직 찾기]
* // --------------------------------------------------------------------------------------
*
* // --------------------------------------------------------------------------------------
*
* // --------------------------------------------------------------------------------------
*
* // --------------------------------------------------------------------------------------
*/
// ------------------------------------------------------------------------------------------
// TODO [사용 방법]
// ------------------------------------------------------------------------------------------
/*
try {
new Thread(new Runnable() {
@Override
public void run() {
// -------------------------------------------------
// TODO [1]. [FTP 서버 접속을 위한 변수 선언]
// -------------------------------------------------
String userName = "test123";
String host = "test.ftp.co.kr";
int port = 21;
String password = "admin1234";
// --------------------------------------
// TODO [2]. [FTP 클라이언트 클래스 인스턴스 초기화]
// --------------------------------------
C_FTP_Client_Module c_ftp_client_module = C_FTP_Client_Module.getInstance();
c_ftp_client_module.setContext(A_Test.this);
// --------------------------------------
// TODO [3]. [FTP 서버 연결 수행]
// --------------------------------------
if(c_ftp_client_module.connectServer(userName, host, port, password) == true) { // [서버 연결 상태 확인]
// -------------------------------------------
// TODO [파일 목록 확인 수행]
// -------------------------------------------
//c_ftp_client_module.getFtpFileList("/html");
// -------------------------------------------
// TODO [특정 파일 포함 확인 수행]
// -------------------------------------------
//String ftpPath = "/html";
//String fileName = "functionTest.html";
//c_ftp_client_module.getFtpFileExists(ftpPath, fileName);
// -------------------------------------------
// TODO [파일 업로드 수행]
// -------------------------------------------
//String originPath = C_App.innerFilePath(A_Test.this) + "/LOG_FILE_FOLDER/APP_CRASH_LOG_FILE.txt";
//String ftpPath = "/html";
//String ftpFileName = "log.txt";
//boolean result = c_ftp_client_module.upLoadFile(originPath, ftpPath, ftpFileName);
//S_Log._W_("FTP 파일 업로드 결과 확인", new String[]{String.valueOf(result)});
// -------------------------------------------
// TODO [파일 다운 로드 수행]
// -------------------------------------------
//String appPath = C_App.innerFilePath(A_Test.this) + "/LOG_FILE_FOLDER";
//String appFileName = "log.txt";
//String ftpPath = "/html/log.txt";
//boolean result = c_ftp_client_module.downLoadFile(appPath, appFileName, ftpPath);
//S_Log._W_("FTP 파일 다운 로드 결과 확인", new String[]{String.valueOf(result)});
// -------------------------------------------
// TODO [파일 명칭 변경 수행]
// -------------------------------------------
//String originPath = "/html/log.txt";
//String newPath = "/html/log2.txt";
//boolean result = c_ftp_client_module.renameFile(originPath, newPath);
//S_Log._W_("FTP 파일 명칭 변경 결과 확인", new String[]{String.valueOf(result)});
// -------------------------------------------
// TODO [파일 삭제 수행]
// -------------------------------------------
//String ftpPath = "/html/log.txt";
//boolean result = c_ftp_client_module.deleteFile(ftpPath);
//S_Log._W_("FTP 파일 삭제 결과 확인", new String[]{String.valueOf(result)});
// -------------------------------------------
// TODO [FTP 연결 종료]
// -------------------------------------------
//c_ftp_client_module.closeServer();
}
else {
S_Log._E_("SFTP 서버 연결 실패", null);
}
}
}).start();
}
catch (Exception e) {
e.printStackTrace();
}
*/
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
// TODO [전역 변수 선언]
// ------------------------------------------------------------------------------------------
private String ACTIVITY_NAME = "C_FTP_Client_Module";
private Context mMainCtx; // [컨텍스트]
boolean isConnection = false; // [연결 상태 체크 변수]
FTPClient ftpClient = null; // [FTPClient]
// ------------------------------------------------------------------------------------------
// TODO [콘텍스트 지정]
// ------------------------------------------------------------------------------------------
public void setContext(Context ctx) {
mMainCtx = ctx;
}
// ------------------------------------------------------------------------------------------
// TODO [인스턴스 생성]
// ------------------------------------------------------------------------------------------
public static C_FTP_Client_Module getInstance() { return C_FTP_Client_Module.LazyHolder.INSTANCE; }
private static class LazyHolder {
private static final C_FTP_Client_Module INSTANCE = new C_FTP_Client_Module();
}
// ------------------------------------------------------------------------------------------
// TODO [FTP 서버 연결 실시]
// ------------------------------------------------------------------------------------------
public synchronized boolean connectServer(String userName, String host, int port, String password) {
S_Log._D_(ACTIVITY_NAME + " :: FTP 서버 연결 수행", new String[]{
"userName :: " + String.valueOf(userName),
"host :: " + String.valueOf(host),
"port :: " + String.valueOf(port),
"pw :: " + String.valueOf(password)
});
// [변수 초기화]
isConnection = false;
// [로직 처리 수행]
try {
if (mMainCtx != null && ftpClient == null){
if (C_Util.stringNotNullMulti(new String[]{userName, host, String.valueOf(port), password}) == true){
ftpClient = new FTPClient();
ftpClient.connect(host, port); // [호스트 연결 수행]
if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){
ftpClient.login(userName, password); // [호스트 로그인 수행]
isConnection = ftpClient.isConnected(); // [변수에 연결 상태 값 저장 수행]
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 연결 수행 에러 발생", new String[]{ "Error :: isPositiveCompletion False" });
try {
if (ftpClient != null){
ftpClient.disconnect();
}
ftpClient = null;
}
catch (Exception es){}
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 연결 수행 에러 발생", new String[]{ "Error :: Input Data Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 연결 수행 에러 발생", new String[]{ "Error :: mMainCtx Is Null or ftpClient Not Null" });
}
}
catch (Exception e){
e.printStackTrace();
}
// [로그 출력 수행]
S_Log._W_(ACTIVITY_NAME + " :: FTP 서버 연결 수행 결과 확인", new String[]{
"RETURN :: " + String.valueOf(isConnection)
});
// [리턴 반환 수행]
return isConnection;
}
// ------------------------------------------------------------------------------------------
// TODO [FTP 서버 연결 종료]
// ------------------------------------------------------------------------------------------
public synchronized void closeServer() {
// [변수 초기화]
isConnection = false;
// [로직 처리 수행]
try {
if (mMainCtx != null && ftpClient != null){
try {
if (ftpClient.isConnected() == true){
ftpClient.disconnect();
}
ftpClient = null;
}
catch (Exception es){
es.printStackTrace();
}
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 연결 종료 수행", null);
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 연결 종료 에러 발생", new String[]{ "Error :: mMainCtx Is Null or ftpClient Not Null" });
}
}
catch (Exception e){
e.printStackTrace();
}
}
// ------------------------------------------------------------------------------------------
// TODO [FTP 서버 파일 목록 확인]
// ------------------------------------------------------------------------------------------
public synchronized FTPFile[] getFtpFileList(String path) {
S_Log._D_(ACTIVITY_NAME + " :: FTP 서버 파일 목록 확인 수행", new String[]{ "path :: " + String.valueOf(path) });
// [리턴 변수 선언]
FTPFile files[] = null;
// [로직 처리 수행]
try {
if (mMainCtx != null && ftpClient != null && isConnection == true){
if (ftpClient.isConnected() == true){
if (C_Util.stringNotNull(path) == true){
files = ftpClient.listFiles(path); // [특정 경로 지정] : [/html]
}
else {
files = ftpClient.listFiles(); // [전체 루트 경로]
}
if (files != null && files.length > 0){
S_Log._W_(ACTIVITY_NAME + " :: FTP 서버 파일 목록 확인 수행", new String[]{ Arrays.toString(files) });
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 목록 확인 에러 발생", new String[]{ "Error :: listFiles Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 목록 확인 에러 발생", new String[]{ "Error :: ftpClient.isConnected() == false" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 목록 확인 에러 발생", new String[]{ "Error :: mMainCtx Is Null or ftpClient Not Null or isConnection false" });
}
}
catch (Exception e){
e.printStackTrace();
}
// [리턴 결과 반환]
return files;
}
// ------------------------------------------------------------------------------------------
// TODO [FTP 서버 파일 존재 확인]
// ------------------------------------------------------------------------------------------
public synchronized boolean getFtpFileExists(String ftpPath, String fileName) {
S_Log._D_(ACTIVITY_NAME + " :: FTP 서버 파일 존재 확인 수행", new String[]{ "ftpPath :: " + String.valueOf(ftpPath), "fileName :: " + String.valueOf(fileName) });
/*
D ===================================================================
[LOG :: CLASS PLACE :: com.example.javaproject.C_Module.C_FTP_Client_Module.getFtpFileExists(C_FTP_Client_Module.java:366)]
----------------------------------------------------
[LOG :: NOW TIME :: 2024-08-31 18:54:07 토요일]
----------------------------------------------------
[LOG :: DESCRIPTION :: FTP 서버 파일 존재 확인 수행]
----------------------------------------------------
[LOG :: ftpPath :: /html]
----------------------------------------------------
[LOG :: fileName :: functionTest.html]
D ===================================================================
D ===================================================================
[LOG :: CLASS PLACE :: com.example.javaproject.C_Module.C_FTP_Client_Module.getFtpFileExists(C_FTP_Client_Module.java:391)]
----------------------------------------------------
[LOG :: NOW TIME :: 2024-08-31 18:54:07 토요일]
----------------------------------------------------
[LOG :: DESCRIPTION :: FTP 서버 파일 존재 확인 성공]
----------------------------------------------------
[LOG :: true]
D ===================================================================
// */
// [리턴 변수 선언]
boolean result = false;
// [로직 처리 수행]
try {
if (mMainCtx != null && ftpClient != null && isConnection == true){
if (ftpClient.isConnected() == true){
if (C_Util.stringNotNull(ftpPath) == true && C_Util.stringNotNull(fileName) == true){
FTPFile [] files = ftpClient.listFiles(ftpPath); // [특정 경로 지정] : [/html]
if (files != null && files.length > 0){
for (int i=0; i<files.length; i++){
if (String.valueOf(files[i].getName()).equals(fileName) == true){
result = true;
break;
}
}
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 존재 확인 성공", new String[]{ String.valueOf(result) });
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 존재 확인 에러 발생", new String[]{ "Error :: FTPFile Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 존재 확인 에러 발생", new String[]{ "Error :: Input Data Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 존재 확인 에러 발생", new String[]{ "Error :: ftpClient.isConnected() == false" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 목록 존재 에러 발생", new String[]{ "Error :: mMainCtx Is Null or ftpClient Not Null or isConnection false" });
}
}
catch (Exception e){
e.printStackTrace();
}
// [리턴 결과 반환]
return result;
}
// ------------------------------------------------------------------------------------------
// TODO [FTP 서버 파일 업로드 수행]
// ------------------------------------------------------------------------------------------
public synchronized boolean upLoadFile(String originPath, String ftpPath, String ftpFileName) {
S_Log._D_(ACTIVITY_NAME + " :: FTP 서버 파일 업로드 수행", new String[]{ "originPath :: " + String.valueOf(originPath), "ftpPath :: " + String.valueOf(ftpPath), "ftpFileName :: " + String.valueOf(ftpFileName) });
/*
W ===================================================================
[LOG :: CLASS PLACE :: com.example.javaproject.C_Module.C_FTP_Client_Module.upLoadFile(C_FTP_Client_Module.java:341)]
----------------------------------------------------
[LOG :: NOW TIME :: 2024-08-26 15:36:15 월요일]
----------------------------------------------------
[LOG :: DESCRIPTION :: FTP 서버 파일 업로드 성공]
----------------------------------------------------
[LOG :: FTP Path :: /html]
----------------------------------------------------
[LOG :: FTP File Name :: log.txt]
W ===================================================================
* */
// [리턴 변수 선언]
boolean result = false;
// [로직 처리 수행]
try {
if (mMainCtx != null && ftpClient != null && isConnection == true){
if (ftpClient.isConnected() == true){
if (C_Util.stringNotNull(originPath) == true && C_Util.stringNotNull(ftpPath) == true && C_Util.stringNotNull(ftpFileName) == true){
// [해당 경로 파일 스트림 읽음]
File originFile = new File(originPath);
if (originFile.exists() == true){
if (ftpClient.changeWorkingDirectory(ftpPath) == true){
FileInputStream fis = new FileInputStream(originFile);
result = ftpClient.storeFile(ftpFileName, fis); // [파일 업로드 수행]
fis.close();
if (result == true){
S_Log._W_(ACTIVITY_NAME + " :: FTP 서버 파일 업로드 성공", new String[]{ "FTP Path :: " + String.valueOf(ftpPath), "FTP File Name :: " + String.valueOf(ftpFileName) });
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 업로드 실패", new String[]{ "FTP Path :: " + String.valueOf(ftpPath), "FTP File Name :: " + String.valueOf(ftpFileName) });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 업로드 에러 발생", new String[]{ "Error :: ftpClient.changeWorkingDirectory == false" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 업로드 에러 발생", new String[]{ "Error :: originFile Path Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 업로드 에러 발생", new String[]{ "Error :: File Path Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 업로드 에러 발생", new String[]{ "Error :: ftpClient.isConnected() == false" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 업로드 에러 발생", new String[]{ "Error :: mMainCtx Is Null or ftpClient Not Null or isConnection false" });
}
}
catch (Exception e){
e.printStackTrace();
}
// [리턴 결과 반환]
return result;
}
// ------------------------------------------------------------------------------------------
// TODO [FTP 서버 파일 다운 로드 수행]
// ------------------------------------------------------------------------------------------
public synchronized boolean downLoadFile(String appPath, String appFileName, String ftpPath) {
S_Log._D_(ACTIVITY_NAME + " :: FTP 서버 파일 다운 로드 수행", new String[]{ "appPath :: " + String.valueOf(appPath), "appFileName :: " + String.valueOf(appFileName), "ftpPath :: " + String.valueOf(ftpPath) });
// [리턴 변수 선언]
boolean result = false;
// [로직 처리 수행]
try {
if (mMainCtx != null && ftpClient != null && isConnection == true){
if (ftpClient.isConnected() == true){
if (C_Util.stringNotNull(appPath) == true && C_Util.stringNotNull(appFileName) == true && C_Util.stringNotNull(ftpPath) == true){
// [해당 경로 파일 스트림 읽음]
File appFile = new File(appPath);
if (appFile.exists() == true){
String srcPath = appPath;
if (appPath.endsWith("/") == true){
srcPath += appFileName;
}
else {
srcPath += "/" + appFileName;
}
// [파일 타입 지정]
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
// [FTP 서버 파일 다운 로드 수행]
FileOutputStream fos = new FileOutputStream(srcPath);
result = ftpClient.retrieveFile(ftpPath, fos);
fos.close();
if (result == true){
S_Log._W_(ACTIVITY_NAME + " :: FTP 서버 파일 다운 로드 성공", new String[]{ "FTP Path :: " + String.valueOf(ftpPath), "APP Path :: " + String.valueOf(srcPath) });
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 다운 로드 실패", new String[]{ "FTP Path :: " + String.valueOf(ftpPath), "APP Path :: " + String.valueOf(appPath) });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 다운 로드 에러 발생", new String[]{ "Error :: appFile Path Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 다운 로드 에러 발생", new String[]{ "Error :: File Path Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 다운 로드 에러 발생", new String[]{ "Error :: ftpClient.isConnected() == false" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 다운 로드 에러 발생", new String[]{ "Error :: mMainCtx Is Null or ftpClient Not Null or isConnection false" });
}
}
catch (Exception e){
e.printStackTrace();
}
// [리턴 결과 반환]
return result;
}
// ------------------------------------------------------------------------------------------
// TODO [FTP 서버 파일 삭제 수행]
// ------------------------------------------------------------------------------------------
public synchronized boolean deleteFile(String ftpPath) {
S_Log._D_(ACTIVITY_NAME + " :: FTP 서버 파일 삭제 수행", new String[]{ "ftpPath :: " + String.valueOf(ftpPath) });
// [리턴 변수 선언]
boolean result = false;
// [로직 처리 수행]
try {
if (mMainCtx != null && ftpClient != null && isConnection == true){
if (ftpClient.isConnected() == true){
if (C_Util.stringNotNull(ftpPath) == true){
// [파일 삭제 수행]
result = ftpClient.deleteFile(ftpPath);
if (result == true){
S_Log._W_(ACTIVITY_NAME + " :: FTP 서버 파일 삭제 성공", new String[]{ "result == true" });
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 삭제 실패", new String[]{ "result == false" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 삭제 에러 발생", new String[]{ "Error :: File Path Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 삭제 에러 발생", new String[]{ "Error :: ftpClient.isConnected() == false" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 삭제 에러 발생", new String[]{ "Error :: mMainCtx Is Null or ftpClient Not Null or isConnection false" });
}
}
catch (Exception e){
e.printStackTrace();
}
// [리턴 결과 반환]
return result;
}
// ------------------------------------------------------------------------------------------
// TODO [FTP 서버 파일 명칭 변경 수행]
// ------------------------------------------------------------------------------------------
public synchronized boolean renameFile(String oldFtpPath, String newFtpPath) {
S_Log._D_(ACTIVITY_NAME + " :: FTP 서버 파일 명칭 변경 수행", new String[]{ "oldFtpPath :: " + String.valueOf(oldFtpPath), "newFtpPath :: " + String.valueOf(newFtpPath) });
// [리턴 변수 선언]
boolean result = false;
// [로직 처리 수행]
try {
if (mMainCtx != null && ftpClient != null && isConnection == true){
if (ftpClient.isConnected() == true){
if (C_Util.stringNotNullMulti(new String[]{oldFtpPath, newFtpPath}) == true){
// [파일 명칭 변경 수행]
result = ftpClient.rename(oldFtpPath, newFtpPath);
if (result == true){
S_Log._W_(ACTIVITY_NAME + " :: FTP 서버 파일 명칭 변경 성공", new String[]{ "result == true" });
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 명칭 변경 실패", new String[]{ "result == false" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 명칭 변경 에러 발생", new String[]{ "Error :: File Path Is Null" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 명칭 변경 에러 발생", new String[]{ "Error :: ftpClient.isConnected() == false" });
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: FTP 서버 파일 명칭 변경 에러 발생", new String[]{ "Error :: mMainCtx Is Null or ftpClient Not Null or isConnection false" });
}
}
catch (Exception e){
e.printStackTrace();
}
// [리턴 결과 반환]
return result;
}
} // TODO [클래스 종료]
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments