[java] Apache Commons Net과의 디렉토리 업로드

Java 어플리케이션에서 FTP를 통해 디렉토리를 업로드하려면, Apache Commons Net 라이브러리를 사용하여 FTP 클라이언트를 구현할 수 있습니다. 이 라이브러리는 FTP를 통해 파일을 전송하기 위한 다양한 기능을 제공합니다.

Apache Commons Net 라이브러리 추가

먼저 Maven을 사용하여 Apache Commons Net 라이브러리를 프로젝트에 추가해야 합니다. pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.8.0</version>
</dependency>

의존성을 추가한 후 Maven 프로젝트를 업데이트하여 라이브러리를 다운로드하고 프로젝트에 적용합니다.

디렉토리 업로드 구현

Apache Commons Net을 사용하여 디렉토리를 FTP 서버에 업로드하는 Java 코드는 다음과 같습니다:

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class FtpDirectoryUpload {

    public static void main(String[] args) {
        String server = "ftp.example.com";
        int port = 21;
        String user = "username";
        String pass = "password";

        FTPClient ftpClient = new FTPClient();
        try {
            ftpClient.connect(server, port);
            ftpClient.login(user, pass);
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

            File localDir = new File("C:\\local\\directory");
            String remoteDirPath = "/remote/directory";

            uploadDirectory(ftpClient, localDir, remoteDirPath, "");

            ftpClient.logout();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }

    public static void uploadDirectory(FTPClient ftpClient, File localDir, String remoteDirPath, String parentDir) throws IOException {
        if (!remoteDirPath.equals("")) {
            if (!ftpClient.changeWorkingDirectory(remoteDirPath)) {
                ftpClient.makeDirectory(remoteDirPath);
                ftpClient.changeWorkingDirectory(remoteDirPath);
            }
        }

        File[] localFiles = localDir.listFiles();
        if (localFiles != null && localFiles.length > 0) {
            for (File localFile : localFiles) {
                if (localFile.isDirectory()) {
                    String newRemoteDirPath = parentDir + "/" + localFile.getName();
                    if (!ftpClient.changeWorkingDirectory(newRemoteDirPath)) {
                        ftpClient.makeDirectory(newRemoteDirPath);
                    }
                    uploadDirectory(ftpClient, localFile, newRemoteDirPath, parentDir + "/" + localFile.getName());
                } else {
                    String remoteFilePath = parentDir + "/" + localFile.getName();
                    FileInputStream inputStream = new FileInputStream(localFile);
                    ftpClient.storeFile(remoteFilePath, inputStream);
                    inputStream.close();
                }
            }
        }
    }
}

위의 코드는 Apache Commons Net을 사용하여 FTP 서버에 디렉토리를 업로드하는 간단한 예제입니다. 코드에서는 FTP 클라이언트를 인스턴스화하고, 로그인한 후 바이너리 파일 타입을 설정합니다. uploadDirectory 메서드를 사용하여 지정된 로컬 디렉토리를 재귀적으로 업로드합니다.

마치며

Apache Commons Net을 이용하면 Java 어플리케이션에서 간단하게 FTP 클라이언트를 구현할 수 있습니다. 따라서 Apache Commons Net을 사용하여 FTP 서버와의 상호작용을 효율적으로 처리할 수 있습니다.

이제 Java 어플리케이션에서 Apache Commons Net을 사용하여 디렉토리를 FTP 서버에 업로드하는 방법을 배웠습니다. 원하는 경우 이 예제를 기반으로 확장하여 개인 또는 업무용 프로젝트에 적용할 수 있습니다.