- PR -

org.apache.commons.net.ftp.FTPClientのlistFileメソッドについて

投稿者投稿内容
なお
常連さん
会議室デビュー日: 2004/02/17
投稿数: 29
投稿日時: 2004-08-14 00:13
>会社員さん
>ftpコマンドでls等動作はしますか?
動作しております。

>ちいにぃさん
ftpクライアント側での対処を考えておりますので、
やはり、Parserを新規に作成してやる必要があるという事でしょうか・・・。
Parser自体のソースを見てみましたが、ソースの解析そのものに時間がかかりそうです。
(正規表現を直ぐには解読出来ないです。。)

ふと思ったのですが、例えば「FFFTP」というフリーのツールでは、
サーバ側のファイルを更新日付を変えずにローカル側にダウンロードする事が出来ますが、
それをJavaで行えさえすれば、ローカルに落としてきた(更新日付が変更されていない)ファイルに対して
Fileオブジェクトを作成し、lastModified() メソッドにて、更新日付を取得出来るのではないでしょうか?
Javaでそういう事を行う方法はないものでしょうか?
(現在のところ、Fileオブジェクトを作成した日付が、更新日付になってしまいます。)
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2004-08-14 01:17
| ふと思ったのですが、例えば「FFFTP」というフリーのツールでは、
| サーバ側のファイルを更新日付を変えずにローカル側にダウンロードする事が出来ますが、
| それをJavaで行えさえすれば、ローカルに落としてきた(更新日付が変更されていない)
| ファイルに対して
| Fileオブジェクトを作成し、lastModified() メソッドにて、更新日付を取得出来るのでは
| ないでしょうか?

 ffftp 1.91 (最新は 1.92ですが) で試してみたところ、
ファイルの「日付」は反映されたのですが、「時刻」は反映されていませんでした。
(00:00:00になる)
 パケットキャプチャして調べると、ファイルの日付は、ファイル一覧を「NLST -alL」
コマンドを発行して調べたときのものを使っているようです。このときに、試したftpサーバ
(ProFTPD 1.2.9)の(少なくとも)現在の設定では時刻を返さないため、こうなるようです。

 よって、ffftp は、1)ファイルの日付を得て、2)ファイル保存後にファイルの日付を
変更、の2段階を踏んでいると思います。

 なので、結局、Commons NET で同じコトを実現するには、FTPClient#listFiles()
などで、日付を取得する必要があるわけです。

 なお、FTPClientクラスで「NLST -alL」を発行して、方法は調べていません。
 FTPClient#listNames() は「NLST」を発行するだけですし。#listFiles() は
「LIST」を発行するだけですし。(FTPCommandクラスってのが合ったような気がします
ので、コレが使えるかも知れませんが)
 また、より正確な日時(年月日時分秒にタイムゾーン付き)を調べるには「MDTM」
コマンドを使いますが、こちらも方法は調べていません。
(もっとも、ftpサーバによってはサポートしていない、と聞いたことがあるような)

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