Java で FTP処理を実装する方法は2種類。
- JDK(標準java) の API を使用
- Apatch Commons Net を使用 ← 簡単に実装できる❢
今回は2点目の「Apache Commons Net」 の commons-net.jar を使用した FTP 送信処理 を紹介します!
前準備(jar のインストール)
Apatch Commons Net を使用 するには前準備が必要です!
- Jakarta の Commons Net のダウンロード
- Eclipse のビルドパスを通す
1. Jakarta の Commons Net のダウンロード
http://commons.apache.org/net/download_net.cgi
「commons-net-3.6-bin.zip」をダウンロードし、解凍してください。
2. Eclipse のビルドパスを通す
- プロジェクト名を右クリック>プロパティ
- Javaのビルドパス>外部Jarの追加
- 1.でダウンロードした Jar を全て選択
これで前準備は完了!
実装
FTP 送信処理 は以下のようになりました!
execute メソッドを呼び出せば、FTP 送信が行われます!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
import java.io.FileInputStream; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; /** * FTP 送信クラス */ public class SendFtp { /** * コンストラクタ */ private SendFtp() { } /** * FTP 送信 * * @param hostName FTP接続ホスト名 * @param portNo FTP接続ポート番号 * @param username FTP接続ユーザー名 * @param password FTP接続パスワード * @param ftpFilePath FTP接続保存パス * @param dataFilePath データファイルのパス * @exception Exception */ public static void execute(String hostName, Integer portNo, String username, String password, String ftpFilePath, String dataFilePath) throws Exception { // FTP CLIENT 作成 FTPClient client = new FTPClient(); // 1.FTP接続 client.connect(hostName, portNo); // 応答結果を確認(FTP接続できたか?) int replyCode = client.getReplyCode(); checkReplyCode("connect", replyCode); // 2.ログイン Object result = client.login(username, password); // 応答結果を確認(ログインできたか?) replyCode = client.getReplyCode(); checkReplyCode("Login", replyCode); // 3.転送モード設定:PASV モード client.enterLocalPassiveMode(); // 応答結果を確認(転送モード設定できたか?) replyCode = client.getReplyCode(); checkReplyCode("Transfer Mode Setting", replyCode); // 4.データ変換モード設定:アスキー result = client.setFileType(FTP.ASCII_FILE_TYPE); // 応答結果を確認(データ変換モード設定できたか?) replyCode = client.getReplyCode(); checkReplyCode("Binary Mode setting", replyCode); // 5.データファイル送信(FTP PUT) client.storeFile(ftpFilePath, new FileInputStream(dataFilePath)); // 応答結果を確認(データファイル送信できたか?) replyCode = client.getReplyCode(); checkReplyCode("PUT", replyCode); // 6.FTP 切断 if (client != null && client.isConnected()) { // FTP切断実行 client.disconnect(); // 応答結果を確認(FTP切断できたか?) replyCode = client.getReplyCode(); } } /** * FTP 応答結果の確認 * * @param procName 処理名(エラーメッセージ用) * @param replyCode 応答結果コード */ public static void checkReplyCode(String procName, int replyCode) throws Exception { // FTP 応答結果の確認 if (! FTPReply.isPositiveCompletion(replyCode)) { String msg = "FTP " + procName + " (FTP Relpy Code:" + replyCode + ")"; throw new Exception("FTP", new String[]{msg}); } } } |
「1.FTP接続」「2.ログイン」「5.データファイル送信」「6.FTP 切断」は必須、
「3.転送モード設定」「4.データ変換モード設定」は環境に合わせて変更してください!
(補足1)転送モード設定 について
FTP 送信元/送信先の環境によって、「ACTIVE モード」と「PASV モード」の転送モードを使い分ける必要があります。
転送モード については、こちらが非常に参考になります。
http://cos.linux-dvr.biz/archives/131
(補足2)データ変換モード設定 について
FTP 送受信するファイルの種類によって、「Binary モード」と「ASCII モード」を選択します。
・Binary モード:GIFファイルやJPEGファイルなどの画像ファイルや音楽ファイルなど
・ASCII モード:HTMLファイルやTXTファイル、CGIファイルなど。別名テキストモード
私の担当案件では、”テキストファイルの送信” かつ ”送信元/送信先で OS が異なる” ので、
「ASCII モード」を選択しました。
データ変換モード設定 については、こちらのサイトが参考になります。
http://se-land.com/wp/2016/03/22/ftp%E3%81%AEbinary%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A8ascii%E3%83%A2%E3%83%BC%E3%83%89/
今回は以上です!
閲覧頂きありがとうございました!