プログラマメモ2 - programmer no memo2

LinuxからWindowsのIIS付属のFTPサーバーにアクセスするFTPクライアントのサンプルです。jakartaのcommonsのnetを使ってます。固まらないと思います。 2008/01/21

どうもLinuxの環境設定によって、FTPクライアントが固まるようになる場合があるので、それをさけるために、enterRemotePassiveMode、enterLocalPassiveModeを続けて呼んでいます。

この呼び出し順序でも動作が変わるようです。

サーバーがWindowsなので、setControlEncodingを設定しています。

多分、動くと思います。

org.apache.commons.net.ftp.FTPClient

よかったら動かしてみてください。


import java.io.IOException;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;

public class TestFtpClient4 {

/**
* LINUXからWindowsのIIS付属のFTPサーバーに接続します。
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
FTPClient client = new FTPClient();

// エンコーディング
client.setControlEncoding("SJIS");

try {

client.setDefaultPort(21);

// (1)
client.connect("アドレス"); // FTPサーバーのIPアドレス
// (2)
client.login("Anonymous", "passowrd"); // FTPサーバーのID,パスワード

// (3)
boolean isRemotePassive = client.enterRemotePassiveMode();

// (4)
client.enterLocalPassiveMode();

// (5)
boolean isOk = client.changeWorkingDirectory("/");
System.out.println("isOk" + isOk);

// (6)
FTPFile[] list = client.listFiles();
for (int i = 0; i < list.length; i++) {
String name = list[i].getName();
String group = list[i].getGroup();
System.out.println("group : " + group);
System.out.println("name : " + name);
}

} catch (SocketException e) {
throw e;
} catch (IOException e) {
throw e;
} finally {
if (client != null && client.isConnected()) {
try {
client.logout();
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("終了");
}
}
}

: