[java][ftp]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サーバがMLSDやMLSTをサポートしていない場合は、ファイル名を取得した後、個別に.getModificationTime(name)メソッドで更新日時を取得することになる。おそらく。GMTで取得されるので変換が必要です。

参考

 

LEAVE A COMMENT