プログラミング忘備録と日記と時々育児の話

アジャイルとAIに関心を持っているSE。1児の母。エキスパートというよりはジェネラリスト。

[Java]FTP接続

前に試作したFTPのクラス。
そのままコピペして動く!というようにはしてませんが
(import文とかセッターゲッターは省略してますし、呼び出し元は載せてません)
FTPでのやり方です。FTPSの場合はクラスをFTPSClientに変更してくださ~い

public class FTPsample {
	/** ユーザ名 */
	private String user;
	/** パスワード */
	private String pass;
	/** サーバー名 */
	private String server;
	/** サーバー側ディレクトリ*/
	private String serverDir;
	/** サーバー側ファイル名 */
	private String serverFileName;
	/** ローカルディレクトリ*/
	private String localDir;
	/** ローカルファイル名*/
	private String localFileName;

	/**
	 * FTPサーバーに接続
	 * 
	 * @return FTPClientオブジェクト
	 * @throws IOException
	 */
	public FTPClient connect() throws IOException {
		FTPClient ftpClient = new FTPClient();
		ftpClient.connect(server);
		ftpClient.enterLocalPassiveMode();
		
		// お好みのミリセカンドでタイムアウトを設定
		// int ms = 300000;
		ftpClient.setSoTimeout(ms);

		// ログイン
		//TODO:ログイン失敗したときの処理も入れてね
		ftpClient.login(user, pass);
		System.out.println(server + "に接続しました");

		//接続をパッシブモードに
		ftpClient.enterLocalPassiveMode();
		//もしアクティブモードで接続したい場合はこう frpClient.enterLocalActiveMode(); 

		//ディレクトリの移動
		//TODO:フォルダなかったときの処理も入れてね
		ftpClient.changeWorkingDirectory(serverDir);
		System.out.println(serverDir + "に移動しました");

		// バイナリモードで転送処理を行う設定
		if (!ftpClient.setFileType(FTP.BINARY_FILE_TYPE)) {
			throw new RuntimeException("[Error]setFileType failure");
		}
		System.out.println("ファイルタイプをバイナリに設定しました");

		return ftpClient;
	}

	/**
	 * ファイルをダウンロード
	 *
	 * @param FTPクライアントのインスタンス
	 * @return 取得したFileを表すFileオブジェクト
	 */
	public File download(FTPClient ftpClient) throws IOException {

		// 保存先とファイル名を設定
		File saveFile = new File(localDir + File.separator + localFileName);

		// お好みのミリセカンドでタイムアウトを設定
		// int ms = 600000;
		// ftpClient.setDataTimeout(ms);

		// ファイル取得
		// TODO:取得失敗したときのry
		ftpClient.retrieveFile(serverFileName, os);
		return saveFile;

	}

	/**
	 * ファイルをアップロード
	 * 
	 * @return ローカルファイルのFileオブジェクト
	 */
	public File upload(FTPClient ftpClient, File file) throws IOException {

		InputStream inputStream = new FileInputStream(file)) {
				//ファイル送信
				// TODO:送信失敗したときのry
				ftpsClient.storeFile(file.getName(), inputStream);
		}
	}

	/**
	 * FTP接続を閉じる
	 */
	public File close(FTPClient ftpClient) throws IOException {
		if (ftpsClient != null && ftpsClient.isConnected()) {
			ftpsClient.logout();
			ftpsClient.disconnect();
		}
	}
}

}