- PR -

FTPでLISTの結果を取得したい

1
投稿者投稿内容
エフテピ
会議室デビュー日: 2004/09/24
投稿数: 6
投稿日時: 2004-09-24 19:54
お世話になります。

java.net.Socket()を使用したFTP処理を開発しております。
LOGINやLOGOUT、PUTの処理はひととおり動作させる事が出来ていますが、
FTP接続先ディレクトリのファイル一覧を取得する処理をどうすればいいのか判らず、
困っております。



private static void login() {
ftp_server = new Socket(MonitorConstraints.FTP_HOST_IP, MonitorConstraints.FTP_PORT);
reader = new BufferedReader(new InputStreamReader(ftp_server.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(ftp_server.getOutputStream()));
getLastStatusCode(); // ステータスコードの同期のため

sendCommand("user " + MonitorConstraints.FTP_USER);
if (getLastStatusCode() != LOGIN_SUCCESS) {
// パスワードも必要
sendCommand("PASS " + MonitorConstraints.FTP_PASSWORD);
if (getLastStatusCode() != LOGIN_SUCCESS) {
//System.out.println("ログイン失敗");
return;
}
}
setBinary();
changeDir(MonitorConstraints.FTP_REMOTE_DIR); // 初期ディレクトリに設定
}

private static void sendCommand(String message) throws IOException {
writer.write(message);
writer.newLine();
writer.flush();
}



このようなロジックにより、sendCommand()に対してFTPコマンドを渡してやれば、それぞれの処理を行い、
getLastStatusCode()によってそのStatusCodeを取得するというものですが、
sendCommand("LIST")とした際、
reader.readLine()の結果として、"150 Opening BINARY mode data connection for /bin/ls."が
戻されますが、肝心のファイル一覧をどう読み取ってやればいいのかが判りません。

大変恐れ入りますが、どなたか一覧の取得方法をご教授いただけないでしょうか?
どうぞ宜しくお願いいたします。
iwao
会議室デビュー日: 2001/08/29
投稿数: 1
投稿日時: 2004-09-24 21:23
データー転送ポートを開いて、そちらからデータを読み込んでみてください。リストの結果が取得できます。

エフテピ
会議室デビュー日: 2004/09/24
投稿数: 6
投稿日時: 2004-09-24 23:35
iwaoさん、ご返答ありがとうございます。

>データー転送ポートを開いて、そちらからデータを読み込んでみてください。
>リストの結果が取得できます。

FTPで使用しているポート21番の事だと思いますが、
「開いて」とはどういうことでしょうか?
よろしければ、もう少し具体的に教えていただけないでしょうか…。

すみません。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-09-25 01:10
FTPにアクセスするライブラリは既にあります。
http://jakarta.apache.org/commons/net/

・技術的な興味で作っている
・顧客がオープンソース製品を使うなとわめいている
・既存の製品では機能が足りない
などの理由がないのであれば既にあるものを利用することをお勧めします。
エフテピ
会議室デビュー日: 2004/09/24
投稿数: 6
投稿日時: 2004-09-25 02:36
ご指摘ありがとうございます。

実はjacartaのライブラリを使用してFTPを行えると言う事には気付いているのですが、
顧客の意向により、今回は上記のソースによりイチからFTPの処理を作成しており、
今から方向を変更する事は時間的にも難しいです。

無理なご相談かもしれませんが、なんとか今のソースを生かして
LISTの戻りを取得できないものでしょうか。

すみませんが、どうぞ宜しくお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-09-25 03:40
「時間的」なことを考えるのであれば今からゴリゴリ作るより既存のものに切り替えた方がよっぽど早く、また安く済むと思うのですが・・・。
FTP自体の仕組みがわかっていないのではあれば今後かなり困難が予想されます。FTPの仕様を読むより
http://www.faqs.org/rfcs/rfc959.html
commonsのサンプルプログラムなり眺めるほうがよっぽど簡単ですよね?

それとも早く納品することよりも OJT でソケットプログラミングやFTPの仕組みを学ぶことのほうが重要視されているということでしょうか?

顧客の真の意向はごりごりコーディングしてもらうことではなく、早く、安く、安定したシステムを構築してもらうことだと思いますので、その点認識合わせをしてはいかがでしょうか。

[ メッセージ編集済み 編集者: インギ 編集日時 2004-09-25 04:01 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-09-25 04:10
これ参考になるかもしれません。
http://www.atmarkit.co.jp/fnetwork/rensai/netpro10/netpro01.html
1

スキルアップ/キャリアアップ(JOB@IT)