FTPClient.listFilesで更新日時の秒が取得できない問題

  技術情報

javaでapache.commonsのFTPClientを使ってFTPしているときの話。

リモートのディレクトリ内のファイル更新日時を取得しようとして、FTPClient.listFiles()メソッドを使うと秒が0で取得されてしまう。
これはlistFiles()メソッドがLISTコマンドを使用していることに起因しているそうで。FTPサーバはUNIXのLSコマンドと同様のリストを返すことがあり、その際に更新日時の精度が欠落してしまうということのようです。

そこで常に秒までの精度で更新日時を返すMLSDコマンドを用いる、mlistDir()メソッドを使用する。(もちろんFTPサーバでMLSDコマンドをサポートしている必要がある)

mlistDir()メソッドは、commons-net-3.0以降から使えるようだ。
FTPサーバがMLSDMLSTをサポートしていない場合は、ファイル名を取得した後、個別に.getModificationTime(name)メソッドで更新日時を取得することになる。おそらく。GMTで取得されるので変換が必要。

参考

LEAVE A COMMENT