Going my way

いいなと思ったことをメモしていきます。

JavaでファイルをFTPするツール


Advertisements


いちいちFFFTPを起動してファイルを手作業で転送するのが面倒なので、バッチに組み込んで自動でFTPするツールを作ろうと思い立った。

引数に送信テキスト名を渡してキックすれば、手作業を省略できるのではないか、と(何言ってるのか意味不明かと思いますが、私事ですいません)

とりあえず実装はディレクトリ構成を見直さないとちゃんとできないので、今日はJavaFTPするコードのサンプルだけ作ってみた。


まず、JavaFTPするには準備が必要となる。

①JakartaのCommons Netをダウンロードしよう
http://commons.apache.org/net/download_net.cgi

「commons-net-3.1-bin.zip」
というzipファイルをダウンロードしてくればOK。

javaFTPを実行する際のAPIが提供されている。

Eclipseのビルドパスを通す。
・プロジェクト名を右クリック→プロパティ
Javaのビルドパス→外部Jarの追加
・①でダウンロードしたzipを解凍して、中にあるJarを全て選択する

③サンプルコードはこんな感じ

import java.io.FileInputStream;
import java.io.IOException;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FTPFile {
	private static int PORT = 21;
	private static String HOST = "ホスト名を記入";
	private static String USER = "ユーザ名を記入";
	private static String PASSWORD = "パスワードを記入";
	
	
	public static void main(String[] args) {
		String SEND_FILE_NAME;
		
                //引数から送信ファイル名を取得
		SEND_FILE_NAME = args[0];
		FTPClient ftpClient = new FTPClient();
		FileInputStream fis = null;
		try {
			
			ftpClient.connect(HOST,PORT);
			System.out.println(HOST+"に接続しています...");
			System.out.println(ftpClient.getReplyString());
			
			int reply = ftpClient.getReplyCode();
			
			if(!FTPReply.isPositiveCompletion(reply)) {
				ftpClient.disconnect();
				System.out.println(HOST+"に接続を拒否されました");
				System.exit(1);
			}
			
			if (ftpClient.login(USER,PASSWORD) == false) {
				System.out.println("ログインに失敗しました");
				System.exit(2);
			}
			
			fis = new FileInputStream(SEND_FILE_NAME);
			//バイナリモードで送信
			ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
			//ファイルを送信
			ftpClient.storeFile(SEND_FILE_NAME,fis);
			//ディレクトリを作成するとき
			ftpClient.makeDirectory("/hoge/");
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(ftpClient.isConnected()){
				try {
					ftpClient.disconnect();
				} catch (IOException e) {
					// TODO 自動生成された catch ブロック
					e.printStackTrace();
				}
			}
			
			if (fis != null) {
				try {
					fis.close();
				} catch(Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
}

このサンプルをちょっと応用して、送信テキストを引数にしてJavaを実効するバッチを作る。
そして、引数を渡して、バッチをキックするVBAを作れば、面倒なFTPの作業は自動化できるはず!